Chcę wątku doładowania do spania przez kilka nanosekund. Poniższy kod jest próbką kompilującą bez błędów. Jednak nie działa zgodnie z oczekiwaniami i nie mogę zrozumieć, dlaczego.Spanie wątku doładowania przez kilka nanosekund
#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;
}
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG jest definicją preprocesor wymagane w celu współpracy z nanosekund (more info). Problemy pojawiają się, gdy ustawiam opcję budowania -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG, wtedy boost :: this_thread :: sleep nie działa dla żadnego posix :: time_duration. Utworzony wątek wykorzystuje cały procesor i nie śpi ani nie przetwarza pozostałych instrukcji. Jeśli definicja preprocesora zostanie usunięta, wątek może zostać uśpiony na dowolny okres czasu, chyba że funkcja boost :: posix_time :: nanoseconds. Program używa zmiennych time_duration do przechowywania nanosekund i sprawia, że boost :: this_thread :: sleep nie działa.
Dziękuję bardzo za poświęcony czas
Co masz na myśli z nim nie działa? Czy śpi krótko, czy długo, czy wcale? Jakie jest wyjście linii std :: cout z nanosecs? – Nobody
Masz rację. Edytowałem post z lepszym opisem. Dziękuję Ci. – Emer
Czy próbowałeś połączyć program z debuginformacją, aby zwiększyć i sprawdzić, co dzieje się podczas snu? Dla mnie brzmi to jak pełne oczekiwania, co jest jasne, ponieważ nie ma innej możliwości spania przez nanosekundy, ponieważ jest to znacznie poniżej limitów harmonogramów. Być może oczekująca pętla nigdy nie wraca z jakiegoś powodu. – Nobody