| 导读 | 这篇文章主要介绍了C++多线程获取返回值方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 |
在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。
那问题来了,我们要怎么获得线程的返回值呢?
我们通过一个例子来说明如何实现这个需求。用多个线程计算(a+b)/ (x+y) 的值
有两种方法,分别是
#include#include #include #include using namespace std; void func2(int x, int y,int* ans) { *ans= x + y; } int main() { //计算(a+b)/(x+y) //用三个线程,一个线程计算a+b,另一个线程计算x+y int a, b, x, y; a = 10, b = 8, x = 2, y = 4; int* sum1 = new int(0); int* sum2 = new int(0); thread t1(func2, a, b, sum1); t1.join(); thread t2(func2, x, y, sum2); t2.join(); cout < (*sum1)="" (*sum2)="">< endl;="" delete="" sum1;="" delete="" sum2;="" system("pause");="" return="" 0;="">
std::future和std::promise是封装好的两个类模板,这两个类需要配合使用,他们的头文件是#include
std::future,它表示存储着一个未来会被初始化的变量。这个变量可以通过std::future提供的成员函数std::future::get()来得到。如果在这个变量被赋值之前就有别的线程试图通过std::future::get()获取这个变量,那么这个线程将会被阻塞到这个变量可以获取为止。 std::promise同样也是一个类模板,这个对象承诺在未来一定会初始化一个变量(这个变量也就是std::future中的变量)。 每一个std::promise对象都有一个与之关联的std::future对象。当std::promise设置值的时候,这个值就会赋给std::future中的对象了。 以上就是本文的全部内容,希望对大家的学习有所帮助。#include
亦舒舒