2010-11-04 101 views
3

我試圖運行下面的代碼:async_connect塊io_service對象:: run_one()中的boost :: ASIO

some_sock.async_connect(...); // handle_connect() sets the 'condition' flag 

boost::asio::deadline_timer t(ios, boost::posix_time::seconds(2)); 
while (t.expires_from_now() >= boost::posix_time::seconds(0)) 
{ 
    ios.run_one(); 
    if (condition) return; 
} 

期望的行爲是定時器T之後,從run_one回報()已過期(2秒後) 。 實際上,run_one()阻塞,直到收到SYN-ACK或RST。如果服務器沒有響應,run_one()會阻塞超過2秒的超時。

我該怎麼辦等待指定的時間來連接在後臺做一些工作?

謝謝。

+1

謝謝。 t.async_wait(升壓::綁定(empty_function()));解決了這個問題。 – excitoon 2010-11-04 22:42:58

回答

0

在另一個線程中爲connect()調用run_one()。超時時調用some_sock.cancel()。 (首先閱讀文檔)。

相關問題