关于Linux下的高精度定时器

操作系统的默认定时器的精度是很低的,比如在windows下调用Sleep(20)延时20毫秒,实际上80毫秒都可能。

做媒体服务器,免不了需要高精度的定时器,比如语音会议,需要很精确地每20毫秒进行一次混音并通过rtp发送。

我们的媒体库原来只在windows下实现,使用了windows写的高性能定时器的一组函数:

CreateTimerQueue()

CreateTimerQueueTimer()

当然,在开始的时候要使用timeBeginPeriod(1)将时间精度设到1毫秒。性能相当不错。


最近开始将媒体库移植到Linux系统,幸运的是,Linux也有高精度的定时器。网上可以搜到内核下的一组函数:

hrtimer_init()

hrtimer_start()

hrtimer_cancel()

等等。但内核函数不方便供应用层调用,需要使用一组所谓的POSIX timer 接口:

timer_create()

timer_settime() // 这个函数将定时器设置信号,定时器就可以周期性地发送信号给调用者了。

经过测试,精度和性能与windows相当。


上述函数的具体使用,可以参考说明文档,并不难。


可惜,这组POSIX timer 接口,在Mac OS X下并不支持。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值