問題タブ [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.
c++ - packaged_taskをラムダに移動します
ラムダ内でboost::packaged_taskを移動して呼び出したい。
しかし、私はエレガントな解決策を見つけることができません。
例:これはコンパイルされません。
私のかなり醜い解決策:
packaged_taskをそれを呼び出すラムダに移動する「適切な」方法は何ですか?
c++ - 任意の型を返す関数を使用してboost::packaged_task <>を保持するキューを作成するにはどうすればよいですか?
1つのスレッドで実行する必要があり、多くのスレッドでフィードできる関数のワークキューを作成しようとしています。これを実現するために、boost::packaged_taskとboost::unique_futureを使用することを計画していました。アイデアはあなたがするだろう:
Foo value = queue.add(myFunc).get();
関数が実行されるまで、これはブロックされます。したがって、queue.add(...)はboost :: functionを受け取り、boost::unique_futureを返します。次に、内部的に、コンストラクターにboost::functionを使用してboost::packaged_taskを作成します。
私が遭遇している問題は、boost ::function<...>が毎回同じになるとは限らないということです。具体的には、その戻り値が変更されます(ただし、関数がパラメーターを受け取ることはありません)。したがって、次のような追加関数が必要です。
さて、それはそれほど悪くはないようですが、それから私は「キュー」を定義する方法の問題に遭遇しました。タイプは一定ではないので、boost::anyを使用する以外に選択肢はないと思います。
しかし、executeSingleを実装しようとすると問題が発生します(実行するためにキューから1つのアイテムだけを取り出します)。
'?' 私がよくわからないことを示してください。別のスレッドから呼び出されるため、テンプレートを使用してexecuteSingleを呼び出すことはできません。boost :: anyを使用しようとしましたが、エラーが発生します:
面白いのは、この時点では実際にはpackaged_taskの戻りタイプは気にせず、実行したいだけですが、テンプレートの詳細は理解できます。
どんな洞察も大歓迎です!
multithreading - C++0x スレッド ライブラリを使用して終了時にクラッシュする
新しい C++0x スレッド ライブラリを試し始めたところですが、ついにいくつかの計算タスクを並行して実行できるようになりました。この例の実行には 1 秒かかりますが、これは私が予想したとおりですが、終了時にクラッシュします。私が間違っていることについて何か考えはありますか?
gdb バックトレースは次のとおりです。
c++ - パラメータを使用して packaged_task を作成するにはどうすればよいですか?
futures、promise、およびパッケージ化されたタスクに関するこの優れたチュートリアルに従って、自分のタスクを準備したいと思うようになりました。
gcc-4.7.0 エラーメッセージを解読できる限り、引数が異なると予想されますか? しかし、どのように?エラーメッセージを短くしようとしました:
私のバリアントは、パラメーターをackermann
間違って提供する方法ですか? それとも間違ったテンプレートパラメータですか? 3,11
スレッドの作成にパラメータを与えませんよね?
失敗した他のバリアントを更新します。
うーん...それは私ですか、それともbeta-gccですか?
c++ - 関数の引数に std::bind プレースホルダーを追加する
Merge クラスを使用してマージソートをカプセル化しています。パッケージ化されたタスクを使用して、再帰呼び出しをマルチスレッド化したいと思います。
次のようにパッケージ化されたタスクをバインドできるかどうか疑問に思っていました:
c++ - この例のcppreferenceのタスクは何ですか?
from cppreferenceのこの説明の例では、という名前のクラスが表示されます。それは何ですか?packaged_task
task
c++ - 匿名 std::packaged_task
Glib::Dispatcher の周りにラッパーを構築して、関数型をディスパッチャにディスパッチしようとしています。関数を Glib メインループに転送できる関数ディスパッチが必要です。
この関数は、f(args) からパッケージ化されたタスクを作成し、その将来を返します。
std::packaged_task<void()>
Glib::Dispatcher に接続された関数がそれらを実行できるように、これらを 1 つの std::queue に入れるために、このタスク a から作成する必要があります。
私の質問は次のとおりです。最初のタスクからその将来に戻り、2番目のタスクをタイプのキューに入れることができるように、2つのステップでstd::packaged_task<R()>
aから作成するにはどうすればよいですか?std::packaged_task<void()>
std::queue<std::packaged_task<void()>>
c++ - std::packaged_taskをカスタムクラス内にラップする
タスクスケジューラと一緒に使用するために、std::packaged_taskを別のクラス内にラップしようとしています。
現時点では、std::futureサポートを除いてすべて機能しています。std :: futureのサポートを取得するには、提供するget_future()関数にstd::packaged_taskを使用する必要があることがわかりました。
私はこれを機能させるために一日中さまざまな方法を試してきましたが、std::bindからの戻り値を使用してpackaged_taskを適切に宣言して初期化することができないようです。std :: async、std :: future、std :: threadなど、関連するすべてのlibstdc ++関数の実装を解読しようとしましたが、うまくいきませんでした。
次のコードは、機能していないバージョンと機能しているバージョンの両方の実装です。それを機能させるには、2つの/ * --- WORKS * /のコメントを外し、他の関連する行にコメントを付けます。
問題はだと思いtypename result_of<callable>::type
ます。関数の戻り型に正しく評価されないと思いcallable
ます。
で使用c++ (Built by MinGW-builds project) 4.8.0 20121225 (experimental)
していWindows 8 64bit
ます。私は単にこの仕事を間違った方法で行おうとしているだけだと思うので、エラーは無関係だと思いますが、とにかくエラーのペーストビンがあります:エラー
c++ - std::packaged_task の理由有効ではありません?
MSVC2012 を使用して、
次のコードは、期待どおりにコンパイルおよび実行されます
次のコードはコンパイルと実行に失敗します
これはなぜですか?
編集: 回避策として、 std::promise を使用して void を返す関数で std::future を取得することが可能です
vs2012 ライブラリには std::thread のバグがあり、promise を l-value 参照として渡し、promise を移動する必要があることに注意してください。promise を値または r- で渡すとコンパイルされません。値参照。これは、実装が期待どおりに動作しない std::bind() を使用しているためと考えられます。