和计数器一样,定时器也是游戏服务器里一个非常重要的功能。在游戏服务器代码中随处可见,它的实现没有想象中那么复杂,可以说是比较简单了,核心的思想就是重载了(),也就是函数对象,用法如下:
static Timer test_timer;
Timer TestTimer::test_timer(60); //一个60秒的定时器
if (test_timer(nowtime))
{
//执行定时60秒每次的操作
}
而Timer类里面主要包含了一个封装了timespec,clock_gettime等系统时间库time.h的类。最后只需把上述if代码放在一个线程的run函数中,不断调用test_timer(判断当前时间是否大于定时时间即可)。
比较特殊的是0点的实现方式,它是通过计数器来实现的,每次会去判断计数器的值是否大于0,如果不是,则说明是0点,然后再把该计数器的值加1。所以这种实现方式并不是严格意义上的0点,服务器重启的时候也会执行一次。
本文介绍游戏服务器中定时器功能,其实现较简单,核心是重载函数对象。给出了定时器用法示例,Timer类封装系统时间库。还提到0点实现方式,通过计数器判断,并非严格意义上的0点,服务器重启时也会执行一次。
5万+

被折叠的 条评论
为什么被折叠?



