microseconds - sleep usleep c++
Cómo dormir un hilo C++ Boost (4)
Aprendí por las malas que al menos en MS Visual Studio (probado en 2013 y 2015) existe la gran diferencia entre
boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval));
y
boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval));
or
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval));
cuando el intervalo es más pequeño que algún umbral bastante sustancial (vi un umbral de 15000 microsegundos = 15 milisegundos).
Si SmallIterval es pequeño, sleep () tiene una interrupción instantánea. dormir (100 mks) se comporta como dormir (0 mks).
Pero sleep_for () para el intervalo de tiempo más pequeño que un umbral hace una pausa para todo el umbral. sleep_for (100 mks) se comporta como sleep_for (15000 mks).
El comportamiento para intervalos mayores que el umbral y para el valor 0 es el mismo.
Parece imposible dormir un hilo usando boost :: thread. El método sleep requiere un system_time, pero ¿cómo puedo construirlo?
Mirar dentro de las bibliotecas en realidad no ayuda mucho ...
Básicamente tengo un hilo dentro de la función que paso a este hilo como punto de entrada, me gustaría llamar algo así como
boost::this_thread::sleep
o algo así, ¿cómo hacer esto?
Gracias
De otra publicación, aprendí que boost::this_thread::sleep
está en desuso en Boost v1.5.3: http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html
En cambio, prueba
void sleep_for(const chrono::duration<Rep, Period>& rel_time);
p.ej
boost::this_thread::sleep_for(boost::chrono::seconds(60));
O tal vez intentar
void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
Estaba usando Boost v1.53 con la función de sleep
obsoleta, y se estrelló temporalmente el programa. Cuando cambié las llamadas a la función sleep
a las llamadas a la función sleep_for
, el programa dejó de bloquearse.
Dependiendo de su versión de Boost:
Ya sea...
#include <boost/chrono.hpp>
#include <boost/thread/thread.hpp>
boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
O...
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
También puede usar microsegundos, segundos, minutos, horas y tal vez algunos otros, no estoy seguro.
en primer lugar
boost::posix_time::seconds secTime(1);
boost::this_thread::sleep(secTime);
en segundo lugar
boost::this_thread::sleep(boost::posix_time::milliseconds(100));