¿Es posible verificar si un std::future
ha finalizado o no? Por lo que puedo decir, la única forma de hacerlo sería llamar al wait_for
con una duración cero y verificar si el estado es ready
o no, pero ¿hay una mejor manera?Obtenga el estado de un estándar: futuro
Respuesta
Tiene razón, y aparte de llamar al wait_until
con un tiempo en el pasado (que es equivalente), no hay mejor manera.
Siempre se puede escribir un pequeño envoltorio si quieres una sintaxis más conveniente:
template<typename R>
bool is_ready(std::future<R> const& f)
{ return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
N. B. si la función se aplaza, nunca volverá a ser verdadera, por lo que probablemente sea mejor verificar wait_for
directamente en el caso en que desee ejecutar la tarea diferida de forma síncrona después de que haya transcurrido un cierto tiempo o cuando la carga del sistema sea baja.
wait_for no muta el futuro, por lo que el parámetro podría declararse como const. –
Considere comprobar valid() primero para evitar errores de tiempo de ejecución si ya se llamó a get o el futuro nunca se inicializó. –
¿Está garantizado que wait_for (chrono :: seconds (0)) devuelva inmediatamente o podría ceder el control del hilo durante algunos milisegundos en algunas implementaciones? Esto sería bastante importante saber que un par de milisegundos es mucho tiempo cuando se codifica un juego ... – kynnysmatto
Mi primera apuesta sería llamar wait_for
con una duración 0, y compruebe el código de resultado que puede ser uno de future_status::ready
, future_status::deferred
o future_status::timeout
.
En cppreference Afirman que valid()
comprueba si el resultado está disponible, pero la norma dice que valid()
volverá true
si *this
se refiere a un estado compartido, independientemente de si ese estado es listo o no.
cppreference se ha actualizado y dice "comprueba si el futuro tiene un estado compartido". (No estoy seguro de si desea eliminar su segundo párrafo o editarlo, por lo que no voy a modificarlo yo mismo). – Default
Hay una función miembro is_ready in the works para std :: future. Mientras tanto, la implementación de VC tiene un miembro _Is_ready().
- 1. ¿Cómo es el futuro de std :: valarray?
- 2. Obtenga el estado de la red de Windows 7
- 3. Obtenga tiempo estándar indio (IST) en C#?
- 4. ¿Alguien sabe el estado y el futuro de la biblioteca JQueryTools? ¿El proyecto está abandonado?
- 5. Comprender el futuro/subprocesamiento
- 6. Obtenga el estado del proceso por pid en Ruby
- 7. Android Location API: obtenga el estado del proveedor
- 8. ¿Cuál es el estado actual de las bibliotecas estándar D?
- 9. ¿Cuál es el futuro de Class :: DBI?
- 10. el futuro del objetivo c?
- 11. El futuro del desarrollo de aplicaciones de escritorio (Windows): el futuro de WPF y Silverlight
- 12. ¿Hay un futuro para PowerPoint VBA/VSTO?
- 13. Obtenga la hora estándar de Sudáfrica en Php
- 14. Scala, el java del futuro (?)
- 15. PostgreSQL: Timestamp en el futuro
- 16. Advertencia: modificada en el futuro
- 17. ¿Cuál es el futuro de VBA?
- 18. ¿Cuál es el futuro de Java 3D?
- 19. ¿Cómo puedo gzip estándar en un archivo y también imprimir estándar en estándar?
- 20. ¿Cuál es el estado de PHPDoc?
- 21. ¿Cuál será el futuro de C# en 10 años?
- 22. Obtenga el cuerpo de un mensaje WCF
- 23. cómo implementar este concepto de futuro/estado como una mónada en scala
- 24. ¿Cuál es el futuro de Linq para SQL
- 25. En espera de un futuro cancelado para terminar realmente
- 26. Concurrencia: interrumpir un futuro sin cancelarlo
- 27. Establecer un NSTimer para disparar una vez en el futuro
- 28. Método Scala @suspendable en un futuro
- 29. Futuro de "SAP Java Connector"
- 30. JQuery no existirá en el futuro?
¿Buscar 'válido'? –
@CatPlusPlus A menos que me equivoque, 'valid' solo comprueba si el futuro tiene un estado compartido (es decir, devuelve' true' hasta que 'get' se invoca en el futuro). –
Entonces, si se ha llamado a 'get' y devuelve el valor almacenado, ¿todavía desea' true'? (No estoy seguro de por qué esto sería útil, ya que solo puede obtener el valor una vez). –