私はboost::asio::io_service::run_one()で読んでいましたが、機能ブロックが意味することで混乱しています。何がブロックされ、ハンドラはどこに定義されていますか?boost :: asio :: io_service :: run_one()の使用方法
1
A
答えて
0
私はboost :: asio :: io_service :: run_one()で読んでいましたが、関数ブロックが意味することで混乱しています。ブロックされたもの
ブロックされたものは、1つのハンドラを完了するまでブロックします。
ハンドラはどこに定義されていますか?
これはありません。 Logically it's described in the documentation。ハンドラは、サービスで保留中のアクションです。だから、あなたがしなければ:
今void foo() { /*.... */ }
void bar() { /*.... */ }
io_service svc;
svc.post(foo);
svc.post(bar);
foo
が完了するまで、あなたは
svc.run_one();
ブロックを呼び出し初めて。 2回目
svc.run_one();
は、bar
までブロックされます。その後、run_one()
をブロックし、ちょうどあなたがサービスの周りに滞在させる場合は0を返しません、例えば:
io_service::work keep_around(svc);
svc.run_one();
他のいくつかのアクションが掲載されるまでブロックされます。
関連する問題
- 1. boost :: asio io_service :: run_oneはセグメンテーションフォールトにつながります
- 2. boost :: io_service poll_oneとrun_oneの違いは何ですか?
- 3. についてboost :: asio :: io_service :: run into multithread
- 4. boost :: asio :: io_serviceが例外をスローする
- 5. io_service-per-CPUでboost :: asio :: spawnを実行する方法は?
- 6. プラグイン間でboost :: asio :: io_serviceを共有する方法[modules]
- 7. boost :: asio :: io_service - なぜポスト関数を使うのですか?
- 8. boost :: property_tree :: read_xml boost :: asio :: spawnを使用して生成されたasioハンドラのsegfaults
- 9. デバイスファイルでasioを使用する方法
- 10. boost :: asio :: io_service.post()バックグラウンドスレッドのメモリ使用率
- 11. 複数のリスニングソケットに同じboost :: asio :: io_serviceを使用できますか?
- 12. boost :: asio :: io_service占有タイマーとポストのキュー長
- 13. boost :: asio :: async_resolve問題
- 14. なぜboost :: asio :: io_service :: workを使用する必要がありますか?
- 15. async_readを実行している間、boost :: asio :: io_service async_writeループ中に
- 16. stop()の後にboost :: asio :: io_serviceをクリアします。
- 17. Boost Asio io_service、クライアントからのメッセージを読む
- 18. boost :: asio :: io_serviceでメインのデータを取得します
- 19. boost :: asio :: io_serviceはハンドラの順序を保持しますか?
- 20. boost asio unix socket reuse
- 21. boost :: asio :: io_service :: runから例外をキャッチできません
- 22. C++ Boost ASIOソケットエラー
- 23. を使ってBOOST ASIOバッファー
- 24. select()をboost :: asio :: io_serviceに置き換える
- 25. 私がboost :: asio :: io_serive :: stop()を呼び出すと、boost :: asio :: io_service :: run()が終了しない
- 26. boost :: asio :: strand && boost :: lockfree :: spsc_queue
- 27. 汎用タスクのためのboost :: asioスレッドプールの使用
- 28. boost asio multicast join
- 29. シンプルなデータ送信:Boost :: asio?
- 30. boost :: asio double buffering
最後のユースケースについて詳しく説明できますか? –
リンクされたドキュメントは、[仕事](http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/reference/io_service__work.html)も参照してください。短い要約は、すべての作業が完了したら 'run *()'と 'poll *()'が常に戻るということです。 「仕事」はそれを防ぐ「人工的」作品です。なぜなら、run_one()が特定のタスクを実行する時間だけでなく、無期限にブロックできることを示しているからです。 – sehe
申し訳ありませんが、リンクされたドキュメントについてより明確な説明がありますか?私はそれを完全に理解していないかもしれませんし、私のrun_one()の実装は無期限にブロックされたようです。 –