找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 9355|回复: 8

ACE的定时器在系统时间修改后失效,请问怎么解决?

[复制链接]
发表于 2008-1-25 10:34:27 | 显示全部楼层 |阅读模式
我的程序中大量使用的ACE的定时器,但是我发现一旦系统时间发生改变,无论向前改动还是向后改动,都会导致ACE的定时器消息不再被触发(或者过一段时间再触发)。
请问怎么样才能使ACE的定时器像Windows的定时器那样,采用相对时间来触发,而不是固定使用绝对时间来触发?
发表于 2008-1-30 02:23:09 | 显示全部楼层
reactor.schedule_timer is using relative time.
 楼主| 发表于 2008-1-31 17:50:50 | 显示全部楼层
楼上能解释一下,系统时间修改后,ACE定时器失效的问题吗?
发表于 2008-2-1 22:40:34 | 显示全部楼层
在C++NPv2中,有这样一段话:
If the application’s timer behavior must remain constant, irrespective of whether the system time was changed or not, its timer source must use the ACE_High_Res_Timer::gettimeofday_hr()
你可以做做测试
 楼主| 发表于 2008-2-15 09:55:52 | 显示全部楼层
这个我知道,这个是指怎么获取与系统时间改变无关的时刻,和Windows的GetTickCount差不多,不过我要问的是定时器。
 楼主| 发表于 2008-2-20 11:46:53 | 显示全部楼层

终于自己搞定了

ACE的定时器机制是建立在Reactor机制之上,ACE的Reactor机制是依赖于ACE_Time_Queue的。ACE_Time_Queue的时间获取机制是可以修改的。有了这种认识,解决方案如下:
对于Reactor的实例,进行下面的调用即可
reactor.timer_queue()->gettimeofday(ACE_High_Res_Timer::gettimeofday_hr);
代码就一句,不过可费了不少脑筋:lol :lol :lol
发表于 2008-2-20 13:02:00 | 显示全部楼层
其实2楼兄弟的办法就可以:)

ACE_Reactor::instance ()->schedule_timer();
 楼主| 发表于 2008-2-20 16:01:09 | 显示全部楼层
7楼的兄弟啊,我问的就是使用schedule_timer中出现的问题……
2楼的兄弟没看清楚我在问什么,楼上的又看错了……
算了,好歹问题我已经搞定了。
发表于 2008-2-20 17:28:18 | 显示全部楼层
我这把时间向前改,没有调用那句话的确会失效:( ,向后改好象还能触发
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-25 03:29 , Processed in 0.014317 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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