2010-11-04 72 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()。 (首先阅读文档)。

相关问题