投稿機能を使用するための賛否両論を教えてください。いつ、なぜ、投稿を使用するのが好きでなければならないのですか。なぜ、それを使用したくないのですか?boost :: asio :: io_service - なぜポスト関数を使うのですか?
7
A
答えて
8
ポストは、現在のコンテキストではなく本質的にコールバックが発生したい場合に非常に便利です。理由は、次のものがあります
現在のコンテキストがロックを保持していると、あなたは彼らがリリースされた後に関数を呼び出すことにしたいです。これにより、デッドロックを起こすことなく、ロック自体を取得することができます。
コールスタックが非常に深い
かもしれない現在のスレッドは、他の方法で機能には不適切かもしれない、とポストは別のスレッドで関数をスケジュールするのに便利な方法です。
0
私はあなたがdispatch()
からpost()
を比較している推測しています。 dispatch()
はすぐにハンドラを呼び出す可能性があり、イベント駆動型プログラミングでは予期しない方法でキューに入れられたイベントに影響を及ぼす可能性があるため、一般にpost()
が安全です。また、コールスタックを小さく保ち、より予測可能な振る舞いを持つことにメリットがあります(dispatch()
may今実行するか、後で実行することができます)。
私はちょうど現在のio_service
イベント/ハンドラ/操作が終了した後にオブジェクトを削除するのに役立つことを発見した。post()
。
関連する問題
- 1. boost :: asio :: io_service :: run_one()の使用方法
- 2. boost :: asio :: io_service占有タイマーとポストのキュー長
- 3. なぜboost :: asio :: io_service :: workを使用する必要がありますか?
- 4. boost :: asio :: io_serviceが例外をスローする
- 5. についてboost :: asio :: io_service :: run into multithread
- 6. 複数のリスニングソケットに同じboost :: asio :: io_serviceを使用できますか?
- 7. boost :: asio :: io_serviceはハンドラの順序を保持しますか?
- 8. boost :: asio :: io_service :: runから例外をキャッチできません
- 9. boost :: asio :: io_serviceでメインのデータを取得します
- 10. boost :: asio io_service :: run_oneはセグメンテーションフォールトにつながります
- 11. Boost Asio io_service、クライアントからのメッセージを読む
- 12. io_service-per-CPUでboost :: asio :: spawnを実行する方法は?
- 13. プラグイン間でboost :: asio :: io_serviceを共有する方法[modules]
- 14. stop()の後にboost :: asio :: io_serviceをクリアします。
- 15. 私がboost :: asio :: io_serive :: stop()を呼び出すと、boost :: asio :: io_service :: run()が終了しない
- 16. async_readを実行している間、boost :: asio :: io_service async_writeループ中に
- 17. Boost :: ASIO:複数のスレッドでtcp :: socketを使用する
- 18. を使ってBOOST ASIOバッファー
- 19. シンプルなデータ送信:Boost :: asio?
- 20. select()をboost :: asio :: io_serviceに置き換える
- 21. C++ Boost ASIOソケットエラー
- 22. boost :: property_tree :: read_xml boost :: asio :: spawnを使用して生成されたasioハンドラのsegfaults
- 23. ブースト:: io_service内部バインド組成::ポスト機能
- 24. boost asio unix socket reuse
- 25. boost :: asio :: strand && boost :: lockfree :: spsc_queue
- 26. boost asio multicast join
- 27. boost :: asio double buffering
- 28. boost :: asio :: io_service.post()バックグラウンドスレッドのメモリ使用率
- 29. Boost :: asioとasync_read
- 30. Boost :: asio async_waitハンドラシグネチャ
これはあなたに興味があるかもしれません "http://stackoverflow.com/questions/2326588/boost-asio-io-service-dispatch-vs-post" – Arunmu
チップのおかげで!私は気づいていませんでした:-) – eve
@ArunMu:私はそのリンクに気付きました。私は拡張された答えを期待していました。 – eve