2016-09-29 17 views
-1

これは実際に達成するのが簡単であるという強い思いがあり、実際にこのようなことは他の言語では簡単です。私のC++は私の最強の言葉ではないので、これをどうやってやるべきかはかなり分かりません。非同期コードのセクションをC++関数に挿入する

私はいくつかのスタートアップを行う機能を持っています。そして、途中でI/Oをやり取りして別のプロセスからデータを取得する必要があります。当然のことながら私はコールバックでこれを行うことができますが、私はこれをやって回避したい:

startupPt1() { 
/* stuff */ 
ioCall(startupPt2()); 
} 

startupPt2() { 
/* rest of stuff */ 
} 

は本当に私は、部品1と、ここ2で起こるアクション間の論理的な分離がないため、これを回避したいです私たちがそれらの間で非同期的に発生させたいと思っているI/Oがあるということです。

私は現在、上記のようにコールバックを使用していますが、それ以外は何をすべきか分かりません。これは、OSがあなたのためにあなたのIOの仕事のスケジュールを設定することができます

#include<future> 

//... 

void startup() { 
    // part 1 
    auto result = std::async([](){ 
     // IO part 
    }); 
    // part 2 not relying on the result of IO 
    // part 2 that uses IO result as result.get() 
} 

:OK

+0

あなたはすでに何か試しましたか? _ "どんなアイデア?"を求める_は、あまりにも広すぎてここで質問することはできません。これは私たちがここで望まないものである無限の議論に変わるかもしれません。このサイトは質問と回答のペアのような簡潔なFAQに関するものです。また、[ここ](http://stackoverflow.com/help/asking)を読むこともできます。 –

+1

[std :: async](http://en.cppreference.com/w/cpp/thread/async)はどうですか? – Gasper

+0

*「当然、コールバックでこれを行うことができます」* C++ではコールバックを使用できます。 'std :: function'を見てください –

答えて

2

、ちょうど私のコメントについて詳しく説明するために、あなたはこのような何かをしたいことがあります。あなたがresults.get()を呼び出した後に、それが完了したことを保証できる唯一の時間があります。

+0

これは私が欲しいものです。私はあなたが何を得ているのか理解していませんでしたが、コードスニペットは非常に明確です。ありがとうございました! – Bronze

関連する問題