Как насчет того, что ваш пример с наноспящим неверен.
#include <time.h>
...
struct timespec sleepTime;
struct timespec time_left_to_sleep;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
while( (sleepTime.tv_sec + sleepTime.tv_nsec) > 0 )
{
nanosleep(&sleepTime, &time_left_to_sleep);
sleepTime.tv_sec = time_left_to_sleep.tv_sec;
sleepTime.tv_nsec = time_left_to_sleep.tv_nsec;
}
По общему признанию, если вы спите только на 1 микросекунду, просыпаясь слишком рано, не должно быть проблемой, но в общем случае это единственный способ сделать это.
И просто для того, чтобы добавить лед в пользу буста, boost::this_thread::sleep()
реализован с использованием nanosleep()
. Они просто позаботились обо всех безумных уголках для тебя.