たとえば、io_serviceを開始する正しいシーケンスとio_service::run()
、アプリケーションの最初の非同期操作を理解しようとしていますasync_accept
。ほとんどのブーストの例は、後者を最初に行うようですが、理由はわかりません。
ブーストドキュメントは次の点を示しています。
結果を取得するには、プログラムでio_service :: run()を呼び出す必要があります。未完了の非同期操作があるときにio_service::run()を呼び出すと、通常、最初の非同期操作を開始するとすぐに呼び出されます。
図から、非同期操作の結果はキューを介してio_serviceに伝達され、io_serviceがすでに実行されていない限り、このキューから結果を取得しないことがわかります。したがって、io_serviceを常に最初に開始する必要があると言うのは正しくありません。ドキュメントはそうではないことを暗示しているようです。誰か説明してもらえますか?