【发布时间】:2011-04-01 19:57:17
【问题描述】:
在线程中,我需要在不同的时间间隔内定期做一些工作,有什么好的方法可以做到这一点?使用 sleep(),然后我需要跟踪下一次唤醒的时间间隔,这似乎不是最好的方法。
谢谢。
【问题讨论】:
在线程中,我需要在不同的时间间隔内定期做一些工作,有什么好的方法可以做到这一点?使用 sleep(),然后我需要跟踪下一次唤醒的时间间隔,这似乎不是最好的方法。
谢谢。
【问题讨论】:
您可以使用 clock_nanosleep 和 TIMER_ABSTIME 标志来处理绝对时间而不是相对时间来进行睡眠。这将避免错误累积问题和竞争条件,即您的程序被中断以及在获取当前时间之后但在调用 sleep 之前安排另一个进程。
或者,您可以将 POSIX 计时器 (timer_create) 与信号处理程序一起使用,其中您选择的信号在除您的线程之外的所有线程中被阻塞,或者在新线程中使用计时器传递来指示条件变量或信号量您的线程是等等。
【讨论】:
timer_create 有什么问题?你可以用它创建很多计时器,当我在我的系统上测试它时最多 32k...
取决于您需要多少准确度:
【讨论】: