1

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 を使用しています。助けてください。

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 に答える