我使用这段代码,使用带有超时的
async_read_some
。 readdata=0;
port_->async_read_some(boost::asio::buffer(vector),
boost::bind(readCallback));
//init async timer
boost::asio::deadline_timer timer(io);
timer.async_wait(boost::bind(timeoutHandler));
timer.expires_from_now(boost::posix_time::seconds(5));
io.reset();
do {
io.run_one();
}
while (readdata==0);
这里是我的回调函数
void readCallback()
{
std::cout << "READ CALLBACK: "<<x<<std::endl;
readdata=1;
return;
}
void timeoutHandler()
{
std::cout << "TIMEOUT CALLBACK: "<<x<<std::endl;
readdata=1;
}
我的问题是timeoutHandler立即执行,而不是在5秒后执行。
io.reset()
时会发生什么?这可能会导致async_wait
重置。 - Steve Van Opstalio.reset()
。您正在向异步事件处理程序(io_service)添加任务,然后立即在运行将执行您添加的事件的服务之前重置它(使用run_one()
)。我建议您阅读并了解更多关于io_service
及其工作原理的知识。 - The Quantum PhysicisttimeoutHandler()
立即被调用。 - user2071938