2009-12-17 22 views
6

Jestem po lepszym przykładem boost::asio::deadline_timerLepsze Boost asio deadline_timer przykład

Podane przykłady zawsze będzie czas na zewnątrz i wywołać metodę close. Próbowałem wywoływać cancel() na czasomierzu, ale powoduje to natychmiastowe wywołanie funkcji przekazanej do async_wait.

Jaki jest poprawny sposób pracy z licznikami w asyncowym kliencie tcp?

+1

Istnieje przyczyna tego zachowania. Każde wywołanie async_wait jest sparowane z procedurą obsługi zakończenia. Anulowanie połączenia nie ma wpływu na to. –

Odpowiedz

20

Wspomniano, że wywołanie cancel() na czasomierzu powoduje natychmiastowe wywołanie funkcji przekazanej do async_wait. Jest to oczekiwane zachowanie, ale pamiętaj, że możesz sprawdzić błąd przekazany do funkcji obsługi zegara, aby ustalić, czy timer został anulowany. Jeśli licznik czasu został anulowany, operation_aborted jest przekazywane. Na przykład:

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; 
    } 
} 

Mam nadzieję, że to pomoże. Jeśli nie, jaki konkretny przykład szukasz?

+0

Czy io_service.stop() anuluje timer? –

Powiązane problemy