timer控件延误的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 03:46:27
在.net编的一个程序中使用timer控件的Tick事件让程序每隔一秒统计一次时长,并依时长计算一次费用,同时记录了计时的开始和结束时间,但是计时结束时timer_tick的次数即秒数比计时的结束减去开始算出的秒数少,是不是因为每一次tick,都要在完成这次tick事件驱动所有过程后,再过一秒开始下一次tick.
如果是这样,怎么才能避免或是修正延误。
还没讲怎么修正呀,你讲的“高手们自已的timer控件的源码”,我找不到,我准备把interval调到很小,例如20MS,然后每次TICK获取一次my.computer.clock.localtime,用这个是否变化还决定是不是更新计时,1000/20=50,一秒钟50次,对精度只需要到秒就行了的计算应是足够了。这样行不行,同时请讲一下高手们修正TIMER的思路,谢谢。
****************************************************
15日补充:那么我想做成出租车打表的那个样子,一边是时间按秒变更,一边是计费不停的增加,结帐号显示计时开始的时间和结果时间,那用什么方法可以搞掂呢.

timer的精度大约55ms,设成20ms只会越弄误差越大,因为来不及对应事件,要前一个事件完成后才能处理下一个,一般如果tick中有任务处理,每秒1次都很吃力了。可以1秒一个timer,然后根据当前时间-开始时间计算秒数,不要依靠timer发生的次数。

很简单的,计时和显示刷新分开就是了。timer负责刷新,时间计算依靠系统时钟。记录下开始时间,每秒一个timer,计算现在时间减去开始时间就是秒数,并显示。

vb 的timer控件不是很精确的东东,有误差,你可以去搜索下高手们自己的timer控件的源码,自己弄个timer用着放心

Timer是不精确的
不能靠Timer的发生次数来计时

利用 my.computer.clock.localtime,
保存开始时间
结束的时候减去开始时间
时长=start_time-end_time