我要求尽可能精确地保持10ms的间隔。
我使用clock_nanosleep,绝对时间唤醒点(每次唤醒后增加10ms)和CLOCK_MONOTONIC。
在我的桌面上唤醒后调用的Ubuntu 11.04 clock_gettime显示我的程序平均在1ms后唤醒。
现在使用Linux调度程序模式:
无论系统是空闲还是运行以下几个副本,结果都是相同的: dd if = / dev / zero of = / dev / null 对于一个aritifical cpu负载。
我的调度程序参数(sched min粒度,唤醒粒度,sched延迟)减少到尽可能少但是没有任何差别。
我没有尝试过任何其他桌面,不确定我是否可以使用带有Ubuntu和Intel核心i5的clock_nanosleep获得预期的精确度,或者我的系统出现了问题。
PS。在一天结束时,当使用非阻塞调用将数据传送到音频设备时,这种clock_nanosleep行为导致音频回放(欠载)期间的延迟增加,中继阻塞调用解决了问题,就像使用时没有调度问题一样阻止来电后醒来。