1

我正在阅读 Anthony Williams 的 C++ concurrency in action。我试图运行一个实现 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。请帮忙。

4

1 回答 1

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;
}
于 2012-08-20T15:55:15.063 回答