在c++11当中,大佬们终于承认了“线程的存在”,这就意味着,支持c++11的编译器,需要把os关于底层的线程的实现进行封装,从而给程序员们提供一个统一的api。
在c++11当中,要是想用线程相关的东西,需要引用新的头文件。举个helloworld的栗子:


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <thread>

  3. void func(){
  4.     std::cout<<"Hello world~"<<std::endl;
  5. }
  6. int main(int argc, char** argv) {
  7.     std::thread t(func);
  8.     t.join();
  9.     return 0;
  10. }
这里thread的一个实例t,初始化的时候要给它一个可调用类型(callable)类型,以便其开展工作,所以,除了函数之外,我们还可以将一个带有函数调用操作符的类的实例传递给std::thread的构造函数,如下:

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <thread>

  3. class task{
  4. public:
  5.     void operator()() const{
  6.         do_func1();
  7.         do_func2();
  8.     }
  9.     void do_func1()const{ std::cout<<"func1"<<std::endl;}
  10.     void do_func2()const{ std::cout<<"func2"<<std::endl;}
  11. };
  12. int main(int argc, char** argv) {
  13.     task f;
  14.     std::thread my_thread(f);
  15.     my_thread.join();
  16.     return 0;
  17. }

11-27 02:50
查看更多