내 앱 (C++, Windows)이 외부 장치와 통신 중입니다. 특정 시간이 지난 후 장치가 응답하지 않으면 상태 변수를 재설정하려고합니다.C++을 사용하여 시간 초과 후 변수 재설정
내 초기 접근 방식은 내가 설문 조사() 대신에 실행() (here 본)을 선택하는 이유
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()을 사용하면 timeout 메소드가 호출되지 않습니다. run()을 사용하면 잘 작동하지만 실행을 차단합니다.
타임 아웃 메서드를 호출해야하는 코드는 어디에 있습니까? 붙여 넣지 않았다면 해주세요. 그러한 코드가 없다면 문제가 있습니다. –
async_wait()는 제한 시간이 만료되거나 취소 된 후에 timeout 메서드를 호출해야합니다. 적어도 그것이 http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/reference/basic_deadline_timer/async_wait.html – Simon
에 대한 나의 이해입니다. 이것이 맞다면 어떻게 될까요? 다른 스레드는 없습니다. 적어도 우리에게 보여준 스레드는 아닙니다. 그리고'async_wait'는 아직 시간이 없기 때문에 그 함수를 호출 할 수 없습니다. 그러면 어떻게 그렇게 될 수 있겠습니까? –