io_service::run() のブロック動作は、作業とハンドラーの処理に起因します。 次の状態になるまでブロックされたままになります。
io_service::run() が「ディスパッチされるハンドラーがなくなる」までブロックされる場合、登録されたコールバックの形式で未処理のタスクがないことを意味します。
最初の例 (3a) では、 io_service は、ポストされた 3 つのフィボナッチ計算ハンドラーがすべて実行されるまで、run() 内でブロックされます。
クライアント コードは非同期 I/O (async_receive) を使用しているように見えますが、実際には同期的に動作します。
同等の同期操作は次のようになります。
boost::asio::error_code error; std::size_t bytes = socket.receive(buffer, error); // Execute handler with error and bytes
同期操作と非同期操作を混在させると、複雑さが生じる可能性があります。この慣行を避けることを検討してください。 Boost.Asio ドキュメントは、非同期プログラミングの利点に関する貴重な洞察を提供します。
以上が`boost::asio::io_service::run()` がブロックされるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。