Hay un aspecto de los temporizadores en las conexiones asíncronas que quiero saber si entiendo correctamente.Algunas aclaraciones son necesarias para las operaciones y temporizadores asíncronos Boost asio
Supongamos que configuramos un temporizador antes de realizar una operación de lectura, que incluye un controlador, y luego, run()
el io_service.
lo que tengo entendido, el io_service termina tan pronto como el gerente termina después de haber sido invocado, lo cual puede suceder por dos razones:
a) la operación de lectura se ha completado.
b) el temporizador ha alcanzado su límite.
Supongamos que se ha alcanzado la primera (a) condición y que la operación de lectura se ha completado antes de que termine el temporizador.
La pregunta es: ¿Qué le sucede a ese temporizador? ¿Necesitamos terminarlo? Diga
dTimer_.expires_from_now (boost::posix_time::seconds(0));
after the io_service.run()?
¿Puede restablecerlo a un nuevo intervalo si es necesario reutilizar el mismo objeto del temporizador para otra operación de lectura?
¿Puedo restablecer() el io_service y reutilizar el mismo objeto en un nuevo run()
para esa nueva operación?
respuesta integral, + 1 para asio impulso :: :: :: error operation_aborted – Ralf
muchas gracias por su explicación clara y nítida del proceso involucrado, pero sigue siendo una pregunta: suponiendo que mi primer escenario, si hay es una operación de lectura y un temporizador, ¿termina io_service cuando termina el primero? el primero? ¿o ambos? –
@Old novato 'io_service :: run()' devuelve el control a la persona que llama cuando no hay más trabajo por hacer, esto está bien descrito en la [documentación] (http://www.boost.org/doc/libs/1_46_0 /doc/html/boost_asio/reference/io_service/run/overload1.html). En su contexto, significa que todos los manejadores pendientes, tanto 'async_read' como' async_wait', serán invocados antes de que regrese. –