2012-01-04 72 views
6

io_service :: poll_one運行io_service對象的事件處理循環 以執行一個就緒處理程序。boost :: io_service poll_one和run_one有什麼區別?

VS

io_service對象:: run_one運行io_service對象的事件處理循環 最多一個處理程序來執行。

從這個解釋看來,poll_one可以執行多個處理程序? run_one或poll_one使用任何稱爲run()的線程還是使用調用poll_one/run_one的線程?

ASIO的文檔非常稀少。

+0

一個執行一個READY處理,其他執行一個處理程序(準備好了沒有)。 – akappa 2012-01-04 13:22:16

+0

好吧,READY處理程序和不是的處理程序之間有什麼區別? – Eloff 2012-01-04 13:26:00

+0

如果你有一個套接字,並且處理程序的工作是從中讀取一些東西,那麼一個就緒處理程序就是一個連接到非空套接字的處理程序(所以你不必等待數據來自網絡) – akappa 2012-01-04 13:29:03

回答

12

poll_one將立即返回(非阻塞),以防沒有要處理的事件。

run_one會阻塞調用線程,直到有一個事件準備好處理。

你也可以查看一些文檔here

+0

因此,run_one的文檔應該讀取「阻塞,直到它執行一個處理程序」vs「執行至多一個處理程序」? – Eloff 2012-01-04 15:23:23

+0

是的,換句話說:) – 2012-01-04 20:05:20

+0

這很混亂。 「最多」在這裏意味着0..1,但如果它阻塞,直到它處理一個事件,它何時可以返回處理0事件? – Eloff 2012-01-04 22:33:47