deadline_timer 나는 아웃는 항상 주어진 boost::asio::deadline_timer
더 나은 부스트 ASIO 예를
예제의 더 나은 예 후 야와 close
메서드를 호출합니다. 나는 타이머에 cancel()
를 호출하는 것을 시도했다 그러나 그것은 async_wait
로 통과 된 기능을 즉시 부르십시오.
비동기 TCP 클라이언트에서 타이머를 사용하는 올바른 방법은 무엇입니까?
deadline_timer 나는 아웃는 항상 주어진 boost::asio::deadline_timer
더 나은 부스트 ASIO 예를
예제의 더 나은 예 후 야와 close
메서드를 호출합니다. 나는 타이머에 cancel()
를 호출하는 것을 시도했다 그러나 그것은 async_wait
로 통과 된 기능을 즉시 부르십시오.
비동기 TCP 클라이언트에서 타이머를 사용하는 올바른 방법은 무엇입니까?
타이머에 cancel()을 호출하면 async_wait에 전달 된 함수가 즉시 호출됩니다. 예상되는 동작이지만 타이머 처리기에 전달 된 오류를 검사하여 타이머가 취소되었는지 확인할 수 있습니다. 타이머가 취소되면 operation_aborted가 전달됩니다. 예 :
void handleTimer(const boost::system::error_code& error) {
if (error == boost::asio::error::operation_aborted) {
std::cout << "Timer was canceled" << std::endl;
}
else if (error) {
std::cout << "Timer error: " << error.message() << std::endl;
}
}
이 정보가 도움이되기를 바랍니다. 그렇지 않다면, 당신이 찾고있는 구체적인 예가 무엇입니까?
io_service.stop()이 타이머를 취소합니까? –
이 동작은 이유가 있습니다. async_wait에 대한 모든 호출은 완료 핸들러와 쌍을 이룹니다. 취소를해도 효과는 없습니다. –