loneship 发表于 2008-1-25 10:34:27

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

我的程序中大量使用的ACE的定时器,但是我发现一旦系统时间发生改变,无论向前改动还是向后改动,都会导致ACE的定时器消息不再被触发(或者过一段时间再触发)。
请问怎么样才能使ACE的定时器像Windows的定时器那样,采用相对时间来触发,而不是固定使用绝对时间来触发?

steven99ca 发表于 2008-1-30 02:23:09

reactor.schedule_timer is using relative time.

loneship 发表于 2008-1-31 17:50:50

楼上能解释一下,系统时间修改后,ACE定时器失效的问题吗?

jerry0715 发表于 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()
你可以做做测试

loneship 发表于 2008-2-15 09:55:52

这个我知道,这个是指怎么获取与系统时间改变无关的时刻,和Windows的GetTickCount差不多,不过我要问的是定时器。

loneship 发表于 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

Joe 发表于 2008-2-20 13:02:00

其实2楼兄弟的办法就可以:)

ACE_Reactor::instance ()->schedule_timer();

loneship 发表于 2008-2-20 16:01:09

7楼的兄弟啊,我问的就是使用schedule_timer中出现的问题……
2楼的兄弟没看清楚我在问什么,楼上的又看错了……
算了,好歹问题我已经搞定了。

Joe 发表于 2008-2-20 17:28:18

我这把时间向前改,没有调用那句话的确会失效:( ,向后改好象还能触发
页: [1]
查看完整版本: ACE的定时器在系统时间修改后失效,请问怎么解决?