tutorial smart remix español curso aprender c++ multithreading c++11 future

c++ - smart - solidity ide



Obtenga el estado de un estándar:: futuro (3)

¿Es posible verificar si un std::future ha finalizado o no? Por lo que puedo decir, la única forma de hacerlo sería llamar a wait_for con una duración cero y verificar si el estado está ready o no, pero ¿hay una forma mejor?


Mi primera apuesta sería llamar a wait_for con una duración de 0 y verificar el código de resultado que puede ser uno de los future_status::ready , future_status::deferred o future_status::timeout .

En cppreference afirman que valid() comprueba si el resultado está disponible , pero el estándar dice que valid() devolverá true si *this refiere a un estado compartido, independientemente de si ese estado está listo o no.


Hay una función de miembro is_ready en proceso para std :: future. Mientras tanto, la implementación de VC tiene un miembro _Is_ready ().


Estás en lo cierto, y aparte de llamar a wait_until con un tiempo en el pasado (que es equivalente), no hay mejor manera.

Siempre puede escribir un pequeño contenedor si desea 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; }

Nota: si la función se aplaza, nunca volverá a ser verdadera, por lo que es mejor comprobar wait_for directamente en el caso en que desee ejecutar la tarea diferida de forma sincrónica después de que haya transcurrido un cierto tiempo o cuando la carga del sistema sea baja.