問題タブ [packaged-task]

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.

0 投票する
1 に答える
1250 参照

c++11 - packaged_task::set_exception に相当するものはありますか?

私の仮定は、それpackaged_taskにはpromise下があるということです。タスクが例外をスローした場合、それを関連する にルーティングするにはどうすればよいfutureですか? だけでpromise呼び出すことができますset_exception – に対して同じことを行うにはどうすればよいpackaged_taskですか?

0 投票する
1 に答える
763 参照

c++ - C++ で packaged_task とスレッドを関連付ける

全て

私はクラスを持っています:

そして主な機能:

このコードは、データの異なる部分に対して同じ操作を実行する 3 つのスレッドを作成できると思います。ただし、スレッド t1 の定義では、コンパイラは次のエラーをポップします。

何が間違っているのか、どうすれば正しく行うことができますか?

よろしくお願いします。

長いです

0 投票する
4 に答える
35198 参照

c++ - packaged_task と async の違いは何ですか

C++11 のスレッド モデルを使用しているときに、次のことに気付きました。

まったく同じことをしているようです。std::asyncで実行した場合、大きな違いがある可能性があることは理解していますがstd::launch::deferred、この場合はありますか?

これら 2 つのアプローチの違いは何ですか? さらに重要なことは、どのユースケースでどちらを使用する必要があるのでしょうか?

0 投票する
0 に答える
327 参照

multithreading - Runnable implementation using packaged_task in c++11

I am trying to create a Runnable interface in c++11 using packaged_task, with child class overriding run() function. I don't know why this code is not compiling. Its giving error related to type argument.

/usr/include/c++/4.8.1/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of()>’ typedef typename result_of<_Callable(_Args...)>::type result_type;

Below is my code snippet. Could someone plz give me some information on this error and whether implementing Runnable this way is a right way to proceed ?

0 投票する
3 に答える
1727 参照

c++ - 独自のスレッドで実行されている C++11 packaged_task には、future を取得するために join() が必要です

最近入手した C++11 の本から、123 ページ (packaged_task 5.3.5.2) の例をビルドしようとしています。これを XCode で機能させるためにいくつかの作業を行った後、いくつか質問があります。

まず、packaged_task ctor に関数ポインターを渡す必要があるようです。テキストにアンパサンドが表示されていないため、タイプミスか、標準の変更が遅れている可能性がありますか?

次に、さらに重要なことに、get を呼び出して sigabrt の取得を回避できるように thread.join(s) を追加する必要があり、プロセスは何も出力せずに終了します。スレッドが値を返すまで get future の呼び出しがブロックされるという印象を受けましたが、そうではないようです。結合を追加すると、コードの非同期 (非ブロッキング) の性質に逆らうようにも見えます。必要に応じて、将来に参加できないのはなぜですか? ドキュメントから読み取ると、get は暗黙的に待機を呼び出し、コードに待機を追加しても、sigabrt が発生することが示されています。これは非常に不可解です。

私は c 言語方言 c11、-std=gnu++11 および libc++ (c++11 サポート付き) を使用しています。運がない他のオプションを試しました(gnuc ++を使用している場合、見つかりません)。これは、コードを作成するために使用できる唯一の組み合わせのようです。XCode は、c++11 をコンパイルするために必要なものについて非常にうるさいです。

事前にご協力いただきありがとうございます。

これは、コードを実行するための私の「修正」を含む本のテストケースです。

0 投票する
2 に答える
1092 参照

c++ - std::packaged_task は破壊の約束を破っていませんか?

パッケージ化されたタスクを使用しているときに、非常に奇妙なことに遭遇しました。~packaged_taskを読むと、 astd::packaged_taskが実行される前に a が破棄された場合、約束が破られ、将来から結果を取得しようとすると がスローされるという印象を受けstd::future_errorます。

ただし、Visual Studio 2013 では、そうではないようです。次のコードを使用します。

std::future_errorオンになることを期待していますf.get()が、代わりにブロックされ、パッケージ化されたタスクが実行されるのを待ちます。

別のコンパイラを試す: http://ideone.com/Wt0WOcは実際にstd::future_error("Broken promise")...をスローします。

Visual Studio 2013 にバグがありますか、それとも何か見落としていますか?

0 投票する
1 に答える
1199 参照

multithreading - std::packaged_task でメンバー関数を std::thread (std::async ではない) で使用する

std::thread から std::future を取得しようとしていますが、そうする唯一の方法 (?) は std::packaged_task を使用することです。さて、さらに std::thread で呼び出したい関数はクラスメンバ関数です。このスレッドUse member function in std::packaged_task を見つけることができましたが、 std::thread の代わりに std::async を使用しています。その投稿に基づいて何かをコンパイルしようとしましたが、ここでこのコードをコンパイルしようとすると:

MSVC 2013 で次のエラーが発生します。

助けていただければ幸いです!ありがとうございました