C++ thread 实现参考

Posted 洪流之源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ thread 实现参考相关的知识,希望对你有一定的参考价值。

参考1:

#include <thread>
#include <iostream>

class Wrapper 

  public:
      void member1() 
      
          std::cout << "i am member1" << std::endl;
      
      void member2(const char *arg1, unsigned arg2) 
      
          std::cout << "i am member2 and my first arg is (" << arg1 << ") and second arg is (" << arg2 << ")" << std::endl;
      
      std::thread member1Thread() 
      
          return std::thread(&Wrapper::member1, this);
      
      std::thread member2Thread(const char *arg1, unsigned arg2) 
      
          return std::thread(&Wrapper::member2, this, arg1, arg2);
      
;

int main() 

  Wrapper *w = new Wrapper();
  std::thread tw1 = w->member1Thread();
  tw1.join();
  w->member2Thread("hello", 100).detach();

  return 0;
 
join()为主线程等待子线程的阻塞模式

detach()为主线程不管子线程的非阻塞模式

参考2:

①创建一个类,并编写圆括号重载函数,初始化一个该类的对象,把该对象作为线程入口地址

class Ta

public:
    void operator()()
    
        cout << "我的线程开始运行" << endl;
        //-------------
        //-------------
        cout << "我的线程运行完毕" << endl;
    
;

//main函数里的:
    Ta ta;
    thread myThread(ta);
    myThread.join();


②lambda表达式创建线程

//main函数中
auto lambdaThread = [] 
        cout << "我的线程开始执行了" << endl;
        //-------------
        //-------------
        cout << "我的线程开始执行了" << endl;
    ;

    thread myThread(lambdaThread);
    myThread.join();



③把某个类中的某个函数作为线程的入口地址

class Data_

public:
    void GetMsg()
    void SaveMsh()
;
//main函数里
    Data_ s;
    //第一个&意思是取址,第二个&意思是引用,相当于std::ref(s)
    //thread oneobj(&Data_::SaveMsh,s)传值也是可以的
    //在其他的构造函数中&obj是不会代表引用的,会被当成取地址
    //调用方式:对象成员函数地址,类实例,[成员函数参数]
    //第二个参数可以传递对象s,也可以传递引用std::ref(s)或&s
    //传递s,会调用拷贝构造函数在子线程中生成一个新的对象
    //传递&,子线程中还是用的原来的对象,所以就不能detach,因为主线程运行完毕会把该对象释放掉
    thread oneobj(&Data_::SaveMsh,&s);
    thread twoobj(&Data_::GetMsg,&s);
    oneobj.join();
    twoobj.join();


 

以上是关于C++ thread 实现参考的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中暂停和恢复 POSIX 线程?

如何在 C++ 中为 GLSL 片段着色器实现 iGlobalTime?

这些 C++ 代码片段有啥作用?

有趣的 C++ 代码片段,有啥解释吗? [复制]

以下代码片段 C++ 的说明

C++ 代码片段执行