我的应用程序(C++,Windows)正在与外部设备进行通信。如果设备在一段时间后没有应答,我想重置一个状态变量。使用C++超时后重置变量
我最初的做法是
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();
}
这应该是非阻塞的,这就是为什么我选择的民意调查()而不是run()的(看到here) 。但是,使用poll()超时方法永远不会被调用。使用run()它工作得很好,但是这会阻止执行。
应该调用超时方法的代码在哪里?如果你没有粘贴它,请做。如果没有这样的代码,那么你的问题。 –
async_wait()应在超时过期或取消后调用超时方法。至少这是我的理解http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/reference/basic_deadline_timer/async_wait.html – Simon
如果这是正确的,它会怎么做?没有其他线索,至少不是你告诉我们的。 'async_wait'现在不能调用这个函数,因为它还没有结束。那么这怎么可能呢? –