У меня есть задача сделать что-то каждую "круглую" минуту (в xx: xx: 00) И я использую что-то вроде
const int statisticsInterval=60;
time_t t=0;
while (1)
{
if (abs(t-time(NULL)==0)) //to avoid multiple calls in the same second that is the multiple of 60
boost::this_thread::sleep(boost::posix_time::seconds(2));//2, not 1 to make sure that 1 second passes
t=time(NULL);
boost::this_thread::sleep(boost::posix_time::seconds(statisticsInterval-(t%statisticsInterval)));
//DO WORK
}
Как вы можете видеть, я использую сон (60 секунд - количество прошедших секунд в текущей минуте). Но один программист сказал мне, что он не является точным и что я должен изменить его на в то время как петля со сном (1) внутри. Я считаю очень сомнительным, что он прав, но я просто хотел проверить, знает ли кто-нибудь, есть ли меньше точности, если спящий интервал длинный. Я предполагаю, что сон реализован таким образом, что в определенное время в будущем триггер активируется, и поток помещается в "готовую к исполнению группу потоков", поэтому я не вижу причин для разницы в точности. BTW OS - ubuntu, и я не забочусь о менее чем 2-3-секундных ошибках. Например, если я сплю в течение 52 секунд, 53,8 сна вполне приемлемы. Постскриптум Я знаю о сне, определяющем минимальное время, и что теоретически мой поток может активироваться в год 2047., но я спрашиваю о реалистичных сценариях.