在UNIX中执行计时器的最佳方法

Joh*_*0te 15 c unix linux timer

我总是注意到人们对在UNIX中创建计时器的不同方式有不同的反应.

我知道在UNIX中每隔X秒执行一次事件的几种不同方法:

  • 你可以做一个轮询线程 - pthread_t与睡眠;
  • 你可以用超时做一个select();
  • 我想你可以用其他几种方式使用操作系统.

有人可以提供一些示例代码,使用"最佳"或最有效的方式来执行计时器,并说明为什么它是最好的?我想使用最有效的机制,但我不确定它是哪一个!

出于我们的目的,只是假装你正在打印"Hello World!" 每10秒一次.

注意:我没有TR1/Boost/etc.在这个系统上,所以请保持它直接进行C/C++和UNIX系统调用.对不起,第一次没有提到:)

dor*_*ron 6

这取决于你想做什么.一个简单的睡眠就足以让你在"Hello"之间等待10秒的简单例子,因为你可能暂停你当前的线程直到你的时间到了.

如果您的线程在您等待期间实际执行某些操作,事情会变得更复杂.如果您正在响应传入的连接,那么您将select在这种情况下使用select语句超时对您的内务管理最有意义.

如果你正在紧密循环处理东西,你可以定期轮询一个开始时间,看看你的10秒是否已经启动.

alarm使用适当的信号处理程序也可以正常工作,但在信号处理程序中可以执行的操作存在严重限制.大多数情况下,它涉及设置一个需要经常轮询的标志.

简而言之,它归结为您的线程如何处理事件.