在C中使用pthread的线程中的计时器?

时间:2011-04-01 19:57:17

标签: c pthreads

在线程中,我需要定期在一些不同的时间间隔内完成一些工作,这样做的好方法是什么?使用sleep(),然后我需要跟踪下一次唤醒的间隔,这似乎不是最佳方式。

感谢。

2 个答案:

答案 0 :(得分:8)

您可以将clock_nanosleepTIMER_ABSTIME标志一起使用绝对时间而不是睡眠的相对时间。这将避免错误累积问题和竞争条件,其中程序被中断,另一个进程在获得当前时间之后但在调用睡眠之前被安排。

或者你可以将POSIX定时器(timer_create)与信号处理程序一起使用,你选择的信号在你的所有线程中都被阻止,或者在一个新的线程中传递定时器,这个线程表示一个条件变量或信号量你的线程正在等待。

答案 1 :(得分:1)

取决于您需要多少准确度:

  • 你可以使用clock_gettime这是非常准确的(~10MHz)。 (使用实时或单调时钟)
  • 如果分辨率和开销不是问题,而是你想获得现实世界的时间,你也可以gettimeofday