Как организовать таймер в Си?

Я почти уверен, что вопрос банален, но почему-то у меня не получается найти хорошее решение.

Есть программа сидящая в бесконечном цикле. Раз в минуту этот цикл надо прервать и выполнить некие действия. Причём прервать нужно именно в начале минуты, т.е. после наступления нулевой секунды. Время может корректироваться по GPS, поэтому привязываться нужно к началу минуты, а не к временному интервалу.

Как это можно сделать грамотно? Попадающиеся мне решения основаны на опросе часов с функцией sleep/usleep. Но это значительно нагружает процессор, а программа в идеале должна сидеть и не занимать процессорное время, пока не придёт начало минуты.
  • Вопрос задан
  • 10054 просмотра
Решения вопроса 1
@xandox
можно ставить sleep на секунду и каждую секунду проверять - не началась ли минута.
когда процесс находиться в sleep он не использует процессор вообще ни как, так что ничего он не нагружает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Адаптивный sleep, скажем на половину или три четверти оставшегося до нулевой секунды интервала?
Ответ написан
@rosperitus
Если вы пишете под Windows, то вот функция timeSetEvent
Ответ написан
@leclecovich
Бесконечный цикл со sleep не очень элегантное решение. Если Вам ничего не мешает перейти на C++, то соберите boost и воспользуйтесь asio. Вот пример www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/... адаптируйте его под свои нужды. Еще посмотрите на boost::posix_time::time_period.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы