我正在阅读Anthony Williams的C ++并发。 我试图运行一个实现std :: promise的示例程序,但它给出了一个错误。如果有人可以提供帮助,请告诉我。感谢。
代码: -
#include <iostream>
#include <future>
#include <thread>
using namespace std;
int myValue(int i,promise<int> intPromise)
{
cout<<"In myValue()"<<endl;
intPromise.set_value(i);
}
int main()
{
cout<<"In main()"<<endl;
promise<int> myPromise;
future<int> result=myPromise.get_future();
thread myThread(myValue,10,move(myPromise));
cout<<"Value : "<<result.get()<<endl;
}
我在编译期间没有收到任何错误,但在运行此程序时出现以下错误。
在没有活动异常的情况下终止调用 中止(核心倾销)
虽然我得到了输出,但我也得到了这个错误。 我在Fedora 17上使用g ++ 4.7.0。请帮忙。
答案 0 :(得分:3)
看起来主线程已在myThread
之前完成。为了阻止主线程,你应该使用std::thread::join()
。
像这样:
#include <iostream>
#include <future>
#include <thread>
using namespace std;
void myValue(int i, promise<int> intPromise)
{
cout << "In myValue()" << endl;
intPromise.set_value(i);
}
int main()
{
promise<int> myPromise;
future<int> result = myPromise.get_future();
thread myThread(myValue, 10, move(myPromise));
myThread.join();
cout << "Value : " << result.get() << endl;
}