microseconds c++ multithreading boost sleep

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));