我的应用程序(C++、Windows)正在与外部设备通信。如果设备在一段时间后没有响应,我想重置一个状态变量。
我最初的方法是
auto timer = boost::asio::deadline_timer(io_svc);
timer.expires_from_now(boost::posix_time::seconds(10));
timer.async_wait(boost::bind(&Class::CurrRequestTimeout, this, boost::asio::placeholders::error));
io_svc.poll();
和超时功能
void Class::CurrRequestTimeout(const boost::system::error_code & ec)
{
if (ec)
{
// this timeout was canceled
return;
}
ResetStatusVariable();
}
这应该是非阻塞的,这就是我选择 poll() 而不是 run() 的原因(见这里)。但是,使用 poll() 永远不会调用 timeout 方法。使用 run() 它可以正常工作,但这会阻止执行。