Искам усилваща нишка да заспи за няколко наносекунди. Следният код е примерен, който се компилира без грешки. Въпреки това не работи според очакванията и не мога да разбера защо.
#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 е дефиниция на препроцесор, необходима за работа с наносекунди (повече информация). Проблемите възникват, когато задам опцията за изграждане -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG, тогава boost::this_thread::sleep не работи за нито един posix::time_duration. Създадената нишка използва целия процесор и не заспива, нито обработва останалите инструкции. Ако дефиницията на препроцесора бъде премахната, нишката може да заспи за всеки период от време, освен ако boost::posix_time::nanoseconds. Програмата използва някои променливи time_duration за съхраняване на наносекунди и това кара boost::this_thread::sleep да не работи.
Благодаря ви много за отделеното време