码迷,mamicode.com
首页 > 编程语言 > 详细

【C++多线程】创建启动线程

时间:2020-06-06 12:40:20      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:pre   namespace   函数对象   join()   class   cout   表达   std   nbsp   

摘要

  子线程在创建时启动

  线程关联的可调对象可以是:普通函数、仿函数对象、Lambda表达式、成员函数

示例

  普通函数

 1 #include <thread>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 void test()
 7 {
 8     cout << "子线程开始执行!" << endl;
 9     //do something
10     cout << "子线程执行完毕!" << endl;
11 }
12 int main()
13 {
14     thread t(test);
15     t.join();   //主线程等待子线程
16     return 0;
17 }

 

  仿函数对象

 1 #include <thread>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 class Test{
 6 public:
 7     void operator()(){
 8         cout << "子线程开始执行!" << endl;
 9         //do something
10         cout << "子线程执行完毕!" << endl;
11     }
12     
13 };
14 int main()
15 {
16     // thread t(Test()); 这种写法会编译器会认为是一个函数声明
17     thread t((Test()));  //可以使用加小括号解决,或者使用一只初始化
18     t.join();   //主线程等待子线程
19     return 0;
20 }

  Lambda表达式

 1 #include <thread>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     thread t(
 9         [] () {
10             cout << "子线程开始执行!" << endl;
11             //do something
12             cout << "子线程执行完毕!" << endl;  
13         }
14         );
15     t.join();   //主线程等待子线程
16     return 0;
17 }

  成员函数

 1 #include <thread>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 class Test{
 6 public:
 7     void test(){
 8         cout << "子线程开始执行!" << endl;
 9         // do somesthing
10         cout << "子线程执行完毕!" << endl;
11     }
12 };
13 
14 int main()
15 {
16     Test obj;
17     thread t(&Test::test, obj); //注意写法,传入成员函数地址,还需要传入对象
18     t.join();   //主线程等待子线程
19     return 0;
20 }

 

【C++多线程】创建启动线程

标签:pre   namespace   函数对象   join()   class   cout   表达   std   nbsp   

原文地址:https://www.cnblogs.com/chen-cs/p/13054027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!