找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4429|回复: 1

关于ACE定时器队列的问题

[复制链接]
发表于 2008-1-6 21:40:26 | 显示全部楼层 |阅读模式
ACE的定时器队列在schedule时采用绝对时间的表示法,如果schedule之后,有人更改了系统的时间的话,会不会影响原来已经schedule的定时器的触发。
考虑这样的情况:
一个服务器在9:10:30接受了一个客户连接后启动一个定时器,在5分钟后如果该客户没数据传输就断开,这样定时器的触发时间是9:15:30。但只过了一分钟有人就把系统的时间改成了9:15:30,那么会不会让原来5分钟后触发的定时器变成马上触发了呢?
 楼主| 发表于 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的机器上可以自己写一个确定基数的函数来搞定。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 06:38 , Processed in 0.030727 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表