2009-12-21 79 views
9

我想提供由全局線程驅動的全局io_service。很簡單,我只需要撥打電話io_service::run()即可。但是,如果沒有工作要做,則不起作用runrun_onepollpoll_one)將返回。但是,如果線程反覆調用run(),則在沒有任何操作時它將忙於循環。io_service :: run()的專用線程

我正在尋找一種方法來讓線程阻塞,而沒有任何工作要在io_service中完成。我可以將一個全局事件添加到混合中,以阻塞線程。但是,這將要求io_service的用戶在每次使用該服務時都通知該事件。不是理想的解決方案。

注意:沒有實際的全局變量,我從不使用併發事件我只是將問題簡化爲我的確切需要。真正的目標是不需要io_service作爲構造參數的asio::deadline_timer子類。

回答

21

您需要創建一個io_service::work對象。

參見本節文檔:

Stopping the io_service from running out of work

+0

不知道這一個。 +1,並刪除了我的黑客建議。 –

+0

謝謝,我已經開始使計時器和無限超時只是爲了這個目的。我對asio永遠印象深刻。他們錯過了極少數的角落案例。 –

相關問題