cualquier forma de comprobar si deadline_timer está activo? p.ej. si está en estado async_wait y no fue cancelado?cómo comprobar si boost :: deadline_timer está activo
Respuesta
El controlador para el tiempo de espera será llamada con una condición de error si el temporizador fue cancelada (así como un tiempo de espera normal). Entonces, ¿no podría simplemente configurar un bool antes de llamar al async_wait
y luego reiniciarlo en el controlador si se establece la condición de error?
tres opciones vienen a la mente:
crear su propia clase temporizador (mediante el uso de la deadline_timer por supuesto) que tiene su propio miembro do_async_wait. En este miembro, establece una variable miembro que luego puede ser devuelta por un miembro bool isWaiting() o similar, antes de llamar a async_wait en el deadline_timer interno. Tenga en cuenta que no creo que el miembro async_wait sea virtual, por lo que no puede heredar desde deadline_timer y anular. Tenga en cuenta que también necesitaría reiniciar el indicador cuando se llame a su controlador (haciendo que su propio temporizador sea el controlador que luego reenvía a cualquier otro controlador) o cuando se llame a cancelar.
Edita el código de refuerzo para hacer lo que quieras. Esto es perfectamente legal por lo que yo sé, sin embargo, esta no es una muy buena opción.
Modifique sus requisitos/diseño para que no necesite saber esto.
¿Qué tal esto?
boost::asio::deadline_timer mTimer;
const bool timerExpired = (mTimer.expires_at()
<= boost::posix_time::second_clock::local_time());
Esto no funcionará debido a que el temporizador no se garantiza que expira exactamente a tiempo. –
¿Cómo es eso diferente a cualquier otro temporizador? –
No es "diferente a ningún otro temporizador". Pero si usa este código para detectar si el temporizador está activo, hay una condición de carrera en la que esto volverá verdadero durante un pequeño intervalo antes de que el temporizador haya expirado. Si usa esto, por ejemplo, para verificar si es seguro liberar memoria, su programa se bloqueará. –
sé que esto es un poco viejo en este punto, pero no tengo otra posible sugerencia: ¿Qué le parece la aplicación y luego solicitar si hay posiblemente pendientes de espera. Se vería así:
mTimer.get_implementation().might_have_pending_waits
- 1. Cómo comprobar si 3g está activo o no en android
- 2. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 3. Cómo comprobar si un elemento seleccionado todavía está "abierto"/activo con jquery
- 4. ¿Cómo comprobar si un trabajo en segundo plano está activo? (Bash)
- 5. Does boost :: asio :: deadline_timer utiliza un hilo para cada temporizador?
- 6. Cómo comprobar si find_package encontró el paquete (boost)
- 7. Comprobar si la actividad está activa
- 8. ¿Cómo comprobar si javascript está deshabilitado?
- 9. ¿Cómo comprobar si bluetooth está habilitado programáticamente?
- 10. ¿Cómo comprobar si UITextFields está vacío?
- 11. ¿Cómo comprobar si un hilo está durmiendo?
- 12. ¿Cómo comprobar si una clase está inicializada?
- 13. ¿Cómo comprobar si está correctamente instalado mongodb
- 14. ¿Cómo comprobar si $ _GET está vacío?
- 15. ¿Cómo comprobar si Suhosin está instalado?
- 16. ¿Cómo comprobar si PHP mail() está habilitado?
- 17. ¿Cómo comprobar si la ruta es válida en boost :: filesystem?
- 18. Determinar si la transacción SQLite3 está activo
- 19. ¿Cómo comprobar si el socket está cerrado en Boost.Asio?
- 20. ¿Cómo puedo saber si NSTimer está activo o no?
- 21. Forma de verificar si TinyMCE está activo en WordPress
- 22. Comprobar si el cronómetro está funcionando
- 23. Mejor asio impulso deadline_timer ejemplo
- 24. VBA Comprobar si la variable está vacía
- 25. Cómo discrimina un impulso cancelado de un impulso reactivado deadline_timer
- 26. Comprobar si el proceso se está ejecutando
- 27. C# comprobar si un directorio está oculto?
- 28. C# DataGridView Comprobar si está vacío
- 29. ssh: comprobar si un túnel está vivo
- 30. Comprobar programáticamente si Windows 7 está activado
sí, se acaba de comprobar si no me he perdido algo en la interfaz deadline_timer –