peakzhang 发表于 2008-1-6 21:40:26

关于ACE定时器队列的问题

ACE的定时器队列在schedule时采用绝对时间的表示法,如果schedule之后,有人更改了系统的时间的话,会不会影响原来已经schedule的定时器的触发。
考虑这样的情况:
一个服务器在9:10:30接受了一个客户连接后启动一个定时器,在5分钟后如果该客户没数据传输就断开,这样定时器的触发时间是9:15:30。但只过了一分钟有人就把系统的时间改成了9:15:30,那么会不会让原来5分钟后触发的定时器变成马上触发了呢?

peakzhang 发表于 2008-1-6 21:40:29

如果时间向前改,计时器可能还会工作,如果向后改,计时器就完蛋了。如果是在intel平台或者solaris下可以采用以下代码搞定
在设置反映器循环之前
(void) ACE_High_Res_Timer::global_scale_factor ();
ACE_Timer_Queue* queue = ACE_Reactor::instance()->timer_queue();
queue->gettimeofday(&ACE_High_Res_Timer::gettimeofday_hr);
在不支持ACE_High_Res_Timer的机器上可以自己写一个确定基数的函数来搞定。
页: [1]
查看完整版本: 关于ACE定时器队列的问题