ACE的定时器在系统时间修改后失效,请问怎么解决?
我的程序中大量使用的ACE的定时器,但是我发现一旦系统时间发生改变,无论向前改动还是向后改动,都会导致ACE的定时器消息不再被触发(或者过一段时间再触发)。请问怎么样才能使ACE的定时器像Windows的定时器那样,采用相对时间来触发,而不是固定使用绝对时间来触发? reactor.schedule_timer is using relative time. 楼上能解释一下,系统时间修改后,ACE定时器失效的问题吗? 在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()
你可以做做测试 这个我知道,这个是指怎么获取与系统时间改变无关的时刻,和Windows的GetTickCount差不多,不过我要问的是定时器。
终于自己搞定了
ACE的定时器机制是建立在Reactor机制之上,ACE的Reactor机制是依赖于ACE_Time_Queue的。ACE_Time_Queue的时间获取机制是可以修改的。有了这种认识,解决方案如下:对于Reactor的实例,进行下面的调用即可
reactor.timer_queue()->gettimeofday(ACE_High_Res_Timer::gettimeofday_hr);
代码就一句,不过可费了不少脑筋:lol :lol :lol 其实2楼兄弟的办法就可以:)
ACE_Reactor::instance ()->schedule_timer(); 7楼的兄弟啊,我问的就是使用schedule_timer中出现的问题……
2楼的兄弟没看清楚我在问什么,楼上的又看错了……
算了,好歹问题我已经搞定了。 我这把时间向前改,没有调用那句话的确会失效:( ,向后改好象还能触发
页:
[1]