一叶小舟_郭 自由 其他  2020年11月20日
关于线程返回值std::future的疑问

#include <list>
#include <thread>

using namespace std;
struct Data
{
int from;
int to;
long long sum;
};
Data sum(int from, int to)
{
Data s;
while(true)
{
s.from = from;
s.to = to;
s.sum = 0;
for(int i = from; i <= to; i++)
{
s.sum += i;
}
for(int i = to; i >= (to+from)/2; i--)
{
s.sum -= i;
}
}

//printf("%d+...+%d-%d...-%d=%lld\n", s.from, s.to, s.to, (s.to+from)/2, s.sum);
//this_thread::sleep_for(std::chrono::milliseconds(50));
return s;
}


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

std::future<Data> retData = std::async(std::bind(&sum, 20, 100000));
while(!retData.valid())
{
continue;
}
cout<<"Data Reday"<<endl;
Data r = retData.get();
cout<<"from:"<<r.from<<" to:"<<r.to<<" result:"<<r.sum<<endl;
return 0;
}

本人在使用future时,发现future的valid值有问题,明明我这代码有无限循环,结果检查值时valid返回true,导致在控制台打出来了,然后再get地方等,这很明显不对,
我其实是在使用线程池的时候发现这个问题,我在主线程检查future时,以为值准备好了,结果锁在等值的地方,其他该做的事情没做,请大神解释一下错误的地方以及正确使用方法,谢谢
本人使用IDE:5.9.3+vc2015 x86
...全文
108 点赞 收藏 3
写回复
3 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告