Длинный сон (в C ++) менее точен, чем короткий

У меня есть задача делать что-то каждую "круглую" минуту (в 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 секунд - количество прошедших секунд в текущей минуте). Но один программист сказал мне, что это неточно, и что я должен изменить его на цикл while с sleep (1) внутри. Я считаю весьма сомнительным, что он прав, но я просто хотел проверить, знает ли кто-нибудь, есть ли меньшая точность, если интервал сна длинный. Я предполагаю, что спящий режим реализован таким образом, что в определенное время в будущем активируется триггер, и поток помещается в «готовую к выполнению группу потоков», поэтому я не вижу причин для различия в точности. BTW OS - это ubuntu, и меня не волнуют ошибки менее 2-3 секунд. Например, если я сплю 52 секунды, вполне приемлемо 53,8 сна. P.S. Я знаю о сне, определяющем минимальное время, и что теоретически моя нить может активироваться в 2047 году, но я спрашиваю о реалистичных сценариях.

17
задан NoSenseEtAl 9 June 2011 в 12:41
поделиться