таймер в потоке с pthread в C? - PullRequest
       5

таймер в потоке с pthread в C?

4 голосов
/ 01 апреля 2011

в темах, мне нужно периодически выполнять какую-то работу через несколько разных интервалов, что было бы хорошим способом сделать это?С помощью sleep () мне нужно отслеживать интервал до следующего пробуждения, что, похоже, не лучший способ.

спасибо.

Ответы [ 2 ]

8 голосов
/ 02 апреля 2011

Вы можете использовать clock_nanosleep с флагом TIMER_ABSTIME для работы с абсолютным временем вместо относительного времени вашего сна. Это позволит избежать проблем накопления ошибок и состояния гонки, когда ваша программа будет прервана, а другой процесс запланирован после получения текущего времени, но до вызова sleep.

В качестве альтернативы вы можете использовать таймеры POSIX (timer_create) с обработчиком сигналов, где выбранный вами сигнал блокируется во всех потоках, кроме вашего, или с доставкой таймера в новом потоке, который сигнализирует переменную условия или семафор, которым ваш поток в ожидании.

1 голос
/ 02 апреля 2011

Зависит от того, сколько точности вам нужно:

  • вы можете использовать clock_gettime Что очень точно (~ 10 МГц).(Используйте часы реального времени или монотонные часы)
  • Если разрешение и накладные расходы не являются проблемой, но вместо этого вы хотите получить реальное время, вы также можете gettimeofday
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...