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.