阅读:2023回复:3
定时器不能定时触发,求助各位老大!!
用evc开发的一应用程序中,主程序中用到一定时器用来定时刷新采集到的数据。工作线程采集数据,在开启多个线程的情况下,定时器不能定时触发,不知是什么原因?(如设定1000ms触发一次,结果会2000ms or 3000ms触发一次)。因原来用VC安下心来程序,第一次使用EVC开发,请各位老大帮帮忙啊!!如有相关资料也可发送到我的邮箱中:sdyl@21cn.com。并欢迎与各位朋友共同学习、探讨、进步!
|
|
论坛版主
|
沙发#
发布于:2004-10-09 13:43
这个问题应该可以解决,原来在ndis和kernel driver版块有段时间一堆人用win2k和nt做实时应用的,不知道怎么突然大家都有这种需求:),桌面系统做不了实时应用,这是先天性问题,但是ce的feature是明确提到其实时性特性的!虽然我还没有具体看它如何确保实时,但这应该是有保障的!
至于使用方式你可以查看msdn上相关部分,肯定有说明,我估计在创建你的线程时指定其优先级为实时优先级就可以了, 你说的这里的问题可能是由于没有启用实时机制,导致你的数据采集任务按常规线程处理,而得不到精度,在没有实时保障情况下使用os的timer这样的误差是正常的。 |
|
板凳#
发布于:2004-10-09 19:17
谢谢wxl_50685330的回复:
定时器用在主线程中,不能设置主线程优先级。是不是在WINCE系统下,定时器的优先级低于其它的消息处理,只有在没有其它消息处理的情况下才会触发定时器事件啊?如果是这样,另建立一个线程,设定其优先级为实时,在该线程中完成原来主线程中定时器事件中的工作,这样应该能保证实时性吧?请wxl_50685330多指点! |
|
论坛版主
|
地板#
发布于:2004-10-10 13:21
产生延迟的原因很多,比如长时间关中断,高优先级任务工作繁重等等,由于操作系统的timer是根据system tick来定时的,每个tick将线程的timer减少一次,直到为0后变为就绪,所以这种定时抖动很大。
就按你说的方式办,问题不大。 |
|