我是C / C ++的新手。我试图用返回值调用2个函数。我做了一些研究,我开始知道线程不适合这个,因为很难通过线程获得返回值。我正在使用未来的库与异步,但它不是一次调用多个函数(我已经用sleep()测试它,我看到它等待其他函数完成以获取返回值)。请查找代码在这里,有些人可以通过展示一个简单的代码来帮助我吗?
#include <iostream>
#include <future>
#include <windows.h>
#include <string>
using namespace std;
// a non-optimized way of checking for prime numbers:
string test(string t1)
{
string h = "Hello";
string hh = h+t1;
return hh;
}
string test1(string t2)
{
string hh = "Hello";
string hhh = hh+t2;
return hhh;
}
int main ()
{
string t1 = "Hai test1";
string t2 = "Hai teset2";
future<string> stt = async (test,t1);
future<string> sttt = async (test1,t2);
string re1 = stt.get();
string re2 = sttt.get();
cout << re1 << endl;
cout << re2 << endl;
return 0;
}
答案 0 :(得分:3)
您应该参考一些标准库参考: http://en.cppreference.com/w/cpp/thread/async
正如您所看到的,std :: async有一个重载,需要额外的启动策略。您调用的std :: async存在以下问题:
与async相同(std :: launch :: async | std :: launch :: deferred,f,args ...)。换句话说,f可以在另一个线程中执行,或者当查询结果std :: future时,它可以同步运行。
和
如果在策略中设置了std :: launch :: async和std :: launch :: deferred标志,则由实现决定是执行异步执行还是延迟评估。
所以最终它取决于你的编译器会发生什么。 解决方案非常简单:
future<string> stt = async (launch::async,test,t1);
future<string> sttt = async (launch::async,test1,t2);
string re1 = stt.get();
string re2 = sttt.get();