C++多线程之带返回值的线程处理函数解读

这篇文章主要介绍了C++多线程之带返回值的线程处理函数解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

No.1 async:创建执行线程

1.1 带返回值的普通线程函数

第一步: 采用async:启动一个异步任务,(创建线程,并且执行线程处理函数),返回值future对象

第二步: 通过future对象中的get()方法获取线程返回值

#include  #include  #include  using namespace std; int testThreadOne() { cout<<"testThreadOne_id:"< result = async(testThreadOne); cout<

1.2 带返回值的类成员函数

class Tihu { public: int TihuThread(int num) { cout<<"TihuThread_id"< result = async(&Tihu::TihuThread,&tihu,1999); cout<

1.3 async的其他参数

  • launch::async: 创建线程并且执行线程处理函数
  • launch::deferred:线程处理函数延迟到 我们调用wait和get方法的时候才会执行,本质是没有创建子线程的

No.2 thread:创建线程

2.1 packaged_task: 打包线程处理函数

  • 通过类模板 packaged_task 包装线程处理函数
  • 通过packaged_task的对象调用get_future获取future对象,再通过get()方法得到子线程处理函数的返回值
void testPackaged_task() { //1. 打包普通函数 packaged_task taskOne(testThreadOne);//函数返回值加上参数类型 thread testOne(ref(taskOne));//需要使用ref转换 testOne.join(); cout< taskTwo(bind(&Tihu::TihuThread,&tihu,placeholders::_1));//如果有参数需要使用占位符 thread testTwo(ref(taskTwo),20); testTwo.join(); cout< taskThree([](int num) { cout<<"thread_id:"<

2.2 promise: 获取线程处理函数“返回值”

第一步: promise类模板,通过调用set_value存储函数需要返回的值

第二步: 通过get_future()获取future对象,再通过get()方法获取线程处理函数中的值

void testPromiseThread(promise& temp,int data) {     cout<<"testPromise"< temp;     thread testp(testPromiseThread,ref(temp),19);     testp.join();     cout<
int main() {     testAsync1();     testAsync2();     testPackaged_task();     testPromise();          return 0; }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是C++多线程之带返回值的线程处理函数解读的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言