問題タブ [std-future]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::async から返された std::future が範囲外になるとハングする
std::async
とstd::future
from を組み合わせて使用していC++ 11
ます。コードで実行する特定のアクティビティに time_out を強制するために使用していますが、サーバーに接続しようとすると時間がかかる場合があります。
コードは次のとおりです。
ほとんどの場合、問題なく動作します。多くの場合、未来はタイムアウトし、準備ができていると報告されます。しかし、私が観察している奇妙な動作はmy_future_result
、スコープ外に出るとハングするため、場合によっては UI がハングすることです。my_future_result.get()
メソッドを終了する直前に呼び出された場合に返されない呼び出しを繰り返すことで、これを確認しました。
どうすればこれを回避できますか? をキャンセルまたは削除または終了する方法はありstd::future
ますか?
multithreading - 抽象基本クラス内での c++11 の std::async の使用
このようなスレッドを抽象基底クラス内で動作させないのはなぜですか? この基本クラスから派生したユーザーのために、マルチスレッドの詳細をすべて抽象化しようとしています。callbackSquare
type を返すと明確に書いたときに「「タイプ」という名前のタイプはありません」と表示される理由がわかりませんint
。
私が得ている奇妙なエラーは次のとおりです。
c++ - gcc 4.6.3 の std::async に移動された shared_ptr の use_count()
以下のコードでは、use_count()
を にshared_ptr
移動しstd::async
ます1
。
私のプラットフォームは gcc 4.6.3 を使用しており、上記のコードは次の出力 ( fun: sp.use_count() == 2
)を提供します。
coliru.stacked-crooked.comでは、希望する動作が得られます ( fun: sp.use_count() == 1
):
coliru がどのコンパイラを使用しているかはわかりませんが、gcc 4.6.3 よりも新しいものだと思います。
gcc 4.6.3 からコンパイラをアップグレードしなくても、希望する動作を実現する方法や回避策はありますか?
c++ - std::future は関連付けられた std::packaged_task の有効期間にどのように影響しますか?
std::packaged_task
変数をコピーしてキャプチャするラムダを含んでいます。これstd::packaged_task
が削除されると、ラムダ内に存在する変数が破棄されると予想されますが、std::future
thisに関連付けられている を取得するstd::packaged_task
と、future
オブジェクトがラムダ内の変数の有効期間を延長することに気付きました。
例えば:
可能な出力は次のとおりです。
したがって、ラムダ内のオブジェクトの有効期間は、 のスコープによって延長されますfuture_result
。
行をコメントアウトするfuture_result = p_task->get_future();
と、可能な出力は次のようになります。
ここでどのメカニズムが機能するのか疑問に思っていましたが、std::future
関連付けられたオブジェクトを維持するリンクが含まれていますか?