Quiero que un hilo de refuerzo duerma durante algunos nanosegundos. El siguiente código es una muestra que se compila sin errores. Sin embargo, no funciona como se esperaba y no puedo entender por qué.Dormir un hilo de refuerzo durante algunos nanosegundos
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
//Building options:
//-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -lboost_date_time-mt -lboost_thread-mt
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
boost::this_thread::sleep(time2);
}
int main(int argc, char* argv[])
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
El BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG es una definición de preprocesador necesario para trabajar con nanosegundos (more info). Los problemas se producen cuando configuro la opción de compilación -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG, y luego boost :: this_thread :: sleep no funciona para ningún posix :: time_duration. El hilo creado usa toda la CPU y no duerme ni procesa las instrucciones restantes. Si se elimina la definición del preprocesador, el hilo puede dormir durante cualquier período de tiempo a menos que refuerce :: posix_time :: nanoseconds. El programa usa algunas variables time_duration para almacenar nanosegundos y eso hace que el boost :: this_thread :: sleep no funcione.
Muchas gracias por su tiempo
¿Qué quiere decir con que no funciona? ¿Duerme a corto o largo o no? ¿Cuál es el resultado de la línea std :: cout con los nanosecs? – Nobody
Tienes razón. Edité la publicación con una mejor descripción. Gracias. – Emer
¿Intentó vincular el programa con debuginformation para mejorar y observar lo que sucede mientras duerme? Para mí, suena como una espera ocupada, lo cual es claro ya que no hay otra posibilidad de dormir durante nanosegundos porque está muy por debajo de los límites del planificador. Quizás el bucle que está esperando nunca vuelva por alguna razón. – Nobody