vincen

我在工程中的解决方案windows下的精确定时器

  测 控系统的实时性是系统正常工作的保证,特别对于精度要求较高的系统,需要精确定义各子系统的工作周期。传统的测控系统为了实现实时工作,常采用DOS计时 器中断技术,修改可编程定时器8353的计数值,在定时器计数结束时产生中断,系统在中断服务程序中完成一个时间周期的操作。利用DOS中断技术,可以很 方便地开发出实时测控软件。但是在DOS下很难开发出具有良好人机交互功能的应用程序,且程序扩展性较差,因此很多技术人员转而寻求在Windows下实 现精确定时。Windows提供了2种定时器。一种是常用的系统计时器,他使用函数SetTimer为程序分配一个计时器,应用程序响应SetTimer 函数发送来的消息WM_T IM ER,在回调函数中完成相应操作。Windows系统定时器是IBM PC硬件和ROM BIOS构造的定时器逻辑的一个相当简单的扩展。PC的ROM初始化8253定时器芯片产生硬件中断08H。中断08H每隔54.915 ms产生一次,或18.2次/s,因此Windows系统定时器的最大分辨率为55 ms,即应用程序每秒只能处理18个实时任务。此外,这个计时器消息的优先级太低,只有在所有的消息(除了消息WM_PAINT)被处理后才能被处理。因 此函数SetTimer只能用于一般的定时,他远远不能满足实时测控系统的要求。为实现系统精确定时,本文采用Win dows多媒体定时器, 他的精度非常高,与硬件中断相当,同时Windows多媒体定时器的优先级很高,他按设定的时间间隔发送消息而不管其他进程是否执行完。常用的Intel 系统多媒 体定时器的最小定时精度可达1 ms,可以满足大部分测控系统实时性的要求。

posted on 2007-09-18 08:19 vincen 阅读(530) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理