标签: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 }
标签:pre namespace 函数对象 join() class cout 表达 std nbsp
原文地址:https://www.cnblogs.com/chen-cs/p/13054027.html