2009-12-17 3 views
6

deadline_timer 나는 아웃는 항상 주어진 boost::asio::deadline_timer더 나은 부스트 ​​ASIO 예를

예제의 더 나은 예 후 야와 close 메서드를 호출합니다. 나는 타이머에 cancel()를 호출하는 것을 시도했다 그러나 그것은 async_wait로 통과 된 기능을 즉시 부르십시오.

비동기 TCP 클라이언트에서 타이머를 사용하는 올바른 방법은 무엇입니까?

+1

이 동작은 이유가 있습니다. async_wait에 대한 모든 호출은 완료 핸들러와 쌍을 이룹니다. 취소를해도 효과는 없습니다. –

답변

20

타이머에 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; 
    } 
} 

이 정보가 도움이되기를 바랍니다. 그렇지 않다면, 당신이 찾고있는 구체적인 예가 무엇입니까?

+0

io_service.stop()이 타이머를 취소합니까? –