2013-04-17 73 views
1

如果我啓動一個asio計時器和一個單獨的線程接收到我的主線程處理程序可以同時運行?我認爲,即使他們同時準備好,單獨的線程也不會按順序調用事件。要同時調用處理程序,asio必須創建自己的(第3個)線程,或者甚至中斷一個處理程序來運行另一個處理程序。儘管看起來很可能,但我找不到可以順序調用處理程序的文檔。是否促進asio呼叫異步處理程序按順序

回答

3

如果多個線程正在服務io_service的事件循環,例如調用io_service::run()的線程池,則處理程序可以併發執行。另一方面,如果只有一個線程服務於io_service,則確保回調處理程序不會同時運行,因爲Boost.Asio保證回調處理程序只能在當前調用io_service::run*()的線程內執行。 Boost.Asio Timer.5 - Synchronising handlers in multithreaded programs教程可能會提供一些關於此主題的更多信息。

+0

坦納,感謝您的迴應我現在很高興我的猜測是正確的。我查看了教程,但仍然找不到在一個線程中單個運行將按順序運行處理程序的文檔。你能指點我的文字嗎? – Ant

+0

@Ant [tutorial](http://www.boost.org/doc/libs/1_53_0/doc/html/booster_asio/tutorial/tuttimer5.html)第二段的最後一行指出:「調用'io_service :: run()'只有一個線程可以確保回調處理程序不能併發運行。「 –

+0

非常感謝你。我看不到看。我現在很開心! – Ant