私のアプリ(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();
}
これは非ブロッキングである必要があります。そのため、run()ではなくpoll()を選択しました(ここを参照)。ただし、poll()を使用すると、timeoutメソッドが呼び出されることはありません。run()を使用すると問題なく動作しますが、これにより実行がブロックされます。