2009-12-17 12 views
6

estoy después de un ejemplo mejor de los boost::asio::deadline_timerMejor asio impulso deadline_timer ejemplo

Los ejemplos dados será siempre el tiempo de espera y llamar al método close. Intenté llamar al cancel() en un temporizador, pero eso hace que la función pasada a async_wait se llame inmediatamente.

¿Cuál es la forma correcta de trabajar con temporizadores en un cliente async tcp?

+1

hay una razón detrás de este comportamiento. Cada llamada a async_wait se combina con un controlador de finalización. La cancelación de llamada no afecta esto. –

Respuesta

20

Menciona que al llamar a cancel() en un temporizador hace que la función pasada a async_wait sea llamada inmediatamente. Este es el comportamiento esperado, pero recuerde que puede verificar el error pasado al controlador del temporizador para determinar si el temporizador fue cancelado. Si se canceló el temporizador, se pasa operation_aborted. Por ejemplo:

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

Espero que esto ayude. Si no, ¿cuál es el ejemplo específico que estás buscando?

+0

¿io_service.stop() cancela el temporizador? –

Cuestiones relacionadas