2012-09-26 81 views
0

我想了解啓動io_service io_service::run()與我的應用程序中的第一個異步操作(例如async_accept)的正確順序。大多數增強示例似乎都是先後者,不知道爲什麼。正確的啓動異步操作序列並在boost :: asio中運行io_service?

boost documentation作出如下觀點:

你的程序必須做才能調用io_service對象:: run()中的結果是 檢索。調用io_service :: run()會阻止未完成的異步操作,因此在開始第一次異步操作時應儘快將其稱爲 。

我從圖中瞭解到,異步操作的結果通過隊列傳遞給io_service,除非io_service已經運行,否則不會從此隊列中獲取結果。因此,說io_service應該總是首先啓動是不正確的。文件似乎暗示了其他情況。有人可以解釋嗎?

回答

2

async_accept這樣的異步操作將在OS中啓動異步任務,該任務會將結果(儘快提供)放入io_service的事件隊列中。

io_service::run將輪詢隊列中的結果並調用處理程序來傳遞這些結果。

當你有沒有異步任務,沒有結果的io_service獲取並也沒有出色的工作可能產生任何結果,所以它只是返回。

所以,你想要的順序是:

  • 開始ATLEAST一個異步任務
  • 呼叫io_service::run發起投票

你甚至可以啓動可以啓動一個異步任務整個連鎖的任務,從來沒有io_service用完工作。

+0

明白了,謝謝。喜歡增強文檔。 – nisah

相關問題