很久之前听著名页游服务器主程讲座时,讲到过定时器的实现,基本思路如下(易语言)
while(true)
{
对定时器进行排序。
for(遍历定时器)
{
if 如果定时器到:
callback;
else
break;
}
usleep(20);
}
按照这个思路,我们继续我们的设计:
1: 首先 定义一个thread类:
实现代码thread.cpp:
2:定义定时器,和定时器线程:
timerthread.h
实现代码:timerthread.cpp
3: 测试函数:
目前存在的问题:定时不准,主要是由于usleep()之后 ,不能及时醒,这个是因为linux线程调度引起的。
改进的方向:1. timerthread 里面的list换成优先队列
2. 添加时间纠正,在测试中发现,每次大概慢100us左右,这对于长时间的定时器是致命。
也想听听广大网友的意见,感激不尽。