問題タブ [stdasync]
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++ - 先物のコンテナが与えられた場合、すべての取得をノンブロッキングで実行するにはどうすればよいですか?
そのため、先物のコンテナを作成するだけでなく、すべての future.get() をブロックしない方法で実行するための一般的な方法を作成しようとしています。
タスクの完了にかかる時間は、通常、数百ミリ秒から最大 2 分であると予想されます。ただし、一部はまったく完了しない場合があります。通常の実行では、少なくとも 10,000 のタスクを実行する必要があります。
futures コンテナー内の他の実行時間の長いタスクに妨げられることなく、最も速く返されるタスクの結果が返されることを望みます。
これまでのところ、タスク完了の遅延をシミュレートするためにダミーのスリープ時間を使用しているだけです (設計は、主に、 thisやthisなど、ここで作成された優れた投稿に感謝します):
だから、私の質問は次のとおりです。
- 私が使用しているアプローチに落とし穴はありますか?
- 私が使用しているものよりも get_async_all() のためのより良い/よりエレガントなアプローチはありますか? または、私がしていることは何でも。
時間を割いてコードを確認し、建設的な批判やフィードバックをくれた人に感謝します。
c++ - スレッドプールを使用する std::async 実装はどれですか?
オブジェクトstd::async
を手動で作成する代わりに使用する利点の 1 つは、カバーの下でスレッド プールを使用して、オーバーサブスクリプションの問題を回避できることです。しかし、どの実装がこれを行うのでしょうか? 私の理解では、Microsoft の実装はそうしていますが、これらの他の実装はどうですか?std::thread
std::async
async
- Gnu の libstdc++
- LLVM の libc++
- Just Software のライブラリ
- ブースト (
boost::thread::async
ではなくstd::async
)
あなたが提供できる情報をありがとう。
c++ - std::thread はどのくらい標準ですか?
cplusplus.comやJosuttis Standard Library Reference bookなど、C++11 用に更新された多くの古典的な C++ 参照ソースでは、ドキュメントがまったくカバーされていないように見えることに気付きました。 std::thread
、std::atomic
、などの C++11 同時実行標準ライブラリ機能std::async
。
これらの同時実行機能は、標準ライブラリの残りの部分よりも「標準的ではない」のですか? それとも、他の理由でドキュメントが不足しているだけですか?
c++ - C++ 非同期スレッドは、スレッドの呼び出しが終了すると終了します
マルチスレッドのアプローチを使用して、再帰的なディレクトリ リストを作成しようとしています。次のコードは、非同期呼び出しを通常のシングル スレッドの再帰関数呼び出しに置き換えると正常に動作しますが、非同期で実装すると、再帰的に開始されたスレッドはすべて、main から行われた最初の非同期呼び出しが終了したときに終了するように見えます。ただし、すべてのファイルが出力されるディレクトリは最初のディレクトリのみであり、「開始」は数回出力され、他のディレクトリのファイルも出力されますが、「終了」は 1 回だけ出力されます。私は根本的な何かが欠けていると思います。このコードの何が問題なのか説明できる人はいますか?
ところで、なぜ wrecursive_directory_iterator を使用しないのかと尋ねる人がいるかもしれません。どうやら wrecursive_directory_iterator は例外をスローし、読み取り権限がない場合は続行できずに停止するため、このメソッドを使用すると、その場合に続行できるはずです。
c++ - 複数の std::threads とメイン プログラムの実行に関する問題
私は何日もの間、いくつかのタイマーを起動し、メインプログラムの実行をクロックしないメカニズムを考え出すのに苦労してきました. .join()
と.detach()
、wait_until()
などの組み合わせ
私が持っているのはのベクトルでstd::thread
あり、私はしたい:
- 最初のポジションを実行する
- 完了するのを待ちます
- 次の位置を実行する
- 完了するのを待ちます
その間、私のアプリの残りの部分は実行されており、ユーザーは何かをクリックしています。
- タイマーが作動している間、メインプログラムの実行をブロックします
また
- メインスレッドから切り離しますが、タイマーは同時に実行されます。前のスレッドが終了した後にタイマーが必要です。
私も投稿しました:C++11 std::threads とスレッドが終了するのを待っていますが、どちらかを理解できるように見える解決策はありません。
私は多分使用する必要がありstd::launch::async
ますか?
編集:なぜこれが私にとって把握するのが難しいのか分かりません。つまり、ビデオゲームは常にこれを行っています。たとえば、タイニー タワーを見てみましょう。フロアにストックすると、それらの操作のそれぞれに、ストックを開始してからそのアイテムがストックされるまでの遅延があり、ポップアップして「フロアがストックされました」と言う HUD がトリガーされます。その間、ゲーム全体が実行されたままになり、他のことを行うことができます。私はこれを理解できないので、密でなければなりません。
c++ - packaged_task と async の違いは何ですか
C++11 のスレッド モデルを使用しているときに、次のことに気付きました。
と
まったく同じことをしているようです。std::async
で実行した場合、大きな違いがある可能性があることは理解していますがstd::launch::deferred
、この場合はありますか?
これら 2 つのアプローチの違いは何ですか? さらに重要なことは、どのユースケースでどちらを使用する必要があるのでしょうか?
c++ - 標準 C++ TCP ソケット、std::async を使用すると接続が EINTR で失敗する
タスクにソケットが含まれている場合、std::async を使用してタスクを並列実行するのに問題があります。
私のプログラムは、Linux 用の標準 C++ で書かれた単純な TCP ソケット サーバーです。クライアントが接続すると、専用のポートが開かれ、個別のスレッドが開始されるため、各クライアントは独自のスレッドで処理されます。
クライアント オブジェクトはマップに含まれています。
すべてのクライアントにメッセージをブロードキャストする機能があります。私はもともと以下のように書いていました:
これをテストしたところ、一度に 3 つのクライアントで動作します。メッセージは 3 つのクライアントすべてに (一度に 1 つずつ) 届き、応答文字列はこのループで 3 回出力されます。ただし、メッセージは一度に 1 つのクライアントにしか送信されないため、低速です。
より効率的にするために、std::async を利用して、すべてのクライアントに対して SendMessageToClient 関数を非同期的に呼び出すことを望んでいました。上記のコードを次のように書き直しました。
上記のコードは、マップ内にクライアントが 1 つしかない場合に期待どおりに機能します。「送信開始」に続いて「送信終了」がすぐに続き、すぐに「待機開始」が続き、3 秒後に (これをテストするためにクライアント応答側で 3 秒間スリープします)、ソケットからのトレースが表示されます。関数を読んで、応答が来ることを確認すると、「end wait」と表示されます
問題は、マップに複数のクライアントがある場合です。ソケットを開いて接続する SendMessageToClient 関数の部分で、以下のコードで失敗します。
出力は次のとおりです。「接続されたクライアント スレッド: 接続に失敗しました 4」。
このエラーコードを調べたところ、次のように説明されています。
私はインターネット上で検索しましたが、システムコールが信号によって中断されているという言及がいくつか見つかりました。
一度に1つずつメッセージ送信関数を呼び出すとこれが機能するのに、非同期を使用してメッセージ送信関数を呼び出すと失敗する理由を誰かが知っていますか? 複数のクライアントにメッセージを送信する方法について、別の提案がある人はいますか?
c++11 - ねじ切り検出
C++ 11 でスレッドの終了を検出したいのですが、その方法がわかりません。「get」ブロック プログラムのように見えます。これが私が行ったことです。
私のプログラムは「実行」メソッドの「else」に入らず、状態がロードされていない間、プログラムは「this->thread->get()」でスタックします。
どうすればそれを処理できますか?
ありがとう!
c++ - std::async 戻り値。未知のエラー
私は、C++ で Windows Kinect を使用しています。ワイピングのように、右手が右から左肩に移動したかどうかを確認しようとしています。メソッドの戻り値が必要なため、std::async を使用しようとしています。私はすでに私が得たエラーをグーグルで検索しましたが、何が問題なのかわかりません。
私が使用する2つの方法:
次のエラーがあります。