私はブーストプログラミングの新人で、io_service::work
を使用する理由を探していましたが、わかりません。いくつかのテストで私はそれを取り除きました。はです。なぜio_service :: workを使うべきですか?
5
A
答えて
9
io_service::run()
は、実行する非同期操作がある限り、操作を実行します。保留中の非同期操作(またはハンドラーが呼び出されている)がない場合はいつでも、run()
呼び出しが戻ります。
しかし、run()
コールはすべての作業が完了するまで終了せず、終了するように明示的に指示されているio_service
があることが好ましい設計があります。それはio_service::work
のために使用されます。 work
オブジェクトを作成すると(通常はヒープとshared_ptrで行います)、io_serviceは常に保留中のものがあるとみなし、run()
メソッドは返されません。サービスを終了できるようにしたら(通常はシャットダウン時に)、私は作業オブジェクトを破棄します。
6
io_service::work
は実際にあなたがio_service
からwork
を追加している、あなたはソケットでの作業や非同期読み込みを開始しているとき、たとえば、io_service
のインスタンスに投稿することができ、すべての作品の基底クラスです。だから、通常は直接work
を使用することはありませんが、これには例外が1つあります:
io_service::run
はすぐに行うには多くの作業がないよう返すので、いくつかの生産者と消費者のスレッドを持つアプリケーションを検討し、生産者は時折作品を制作しますio_service::post
でコンシューマスレッドにポストしますが、すべての作業が終了した場合はio_service::run
が返され、コンシューマスレッドが停止する可能性があります。io_service
をビジー状態に保つために任意の作業が必要な場合は、io_service::work
を直接使用できます。
関連する問題
- 1. なぜboost :: asio :: io_service :: workを使用する必要がありますか?
- 2. boost :: asio :: io_service - なぜポスト関数を使うのですか?
- 3. io_service、なぜ、どのように使用されていますか?
- 4. Zendフレームワーク - なぜデータマッパー/ Db_Table_Rowを使うべきですか?
- 5. Obj-C、なぜAvfoundationを使うべきですか?
- 6. なぜdupメソッドを使うべきですか?
- 7. ブートストラップのカスタマイズ:なぜ私はLESSを使うべきですか?
- 8. なぜNHibernateセッションの上でUnit of Workパターンを使用するのですか?
- 9. git rebase -i:/^major workはなぜですか?
- 10. メールを送信するのになぜActiveMQを使うべきですか?
- 11. なぜ私は衝突検出でQuadTreeを使うべきですか
- 12. なぜx86とx86_x64で 'rdtsc'を別々に使うべきですか?
- 13. なぜandroid Logクラスを使用すべきですか?
- 14. なぜ「トップ| grep> file 'not work?
- 15. GWT.createは何を意味し、なぜそれを使うべきですか?
- 16. setUpClassはいつ使うべきですか?__init__を使うべきですか?
- 17. なぜ私は__get()と__set() - phpの魔法を使うべきですか?
- 18. なぜJava 7を使用すべきか、なぜ使用しないのですか?
- 19. なぜ組成はオープンクローズド原理に従うべきですか?
- 20. MVC:なぜ "コントローラ"が必要なのですか?このパターンをいつ使うべきですか?
- 21. 複数のリスニングソケットに同じboost :: asio :: io_serviceを使用できますか?
- 22. Jira Agileでは "Story"をいつ使うべきか "Improvement"を使うべきか
- 23. jQuery.each()を使うべきですか?
- 24. なぜコマンドを実行するだけでなく、バンドルexec <command>を使うべきですか?
- 25. ウェブジョブではなくロジックアプリケーションをいつ使うべきですか?
- 26. gccではなくldを使うべきですか?
- 27. なぜn-wayマージを使うべきですか? 2ウェイマージよりもメリットは何ですか?
- 28. JavascriptのメソッドCollectGarbage()とは何ですか?いつ、なぜそれを使うべきですか?
- 29. YiiのようなMVCでスマートなテンプレートエンジンを使うべきですか?
- 30. returnを使うときにpthread_exit()を使うのはなぜですか?
reset()のように破棄しますか? – lucastamoios
通常、shared_ptrを使用して動作する場合、私はshared_ptrに対して 'reset()'を呼び出します。 –