文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C++BuilderWin95下高精度定时器的实现
精品推荐
特别推荐
·菜鸟入门 认识C#中的委托和事件
·WINDOWS下的动态鼠标光标控制
热点TOP10
·在 C++ Builder中利用串行通信控件编程
·用Builder C++设计串行口COM1或COM2的读写操作
·Windows多线程间同步事件的控制方法
·用WinSock控件编写网络聊天器
·在C++ Builder中进行DirectX编程(2)
·C++ Builder VCL库函数简介
·用C++ Builder3 制作记事本
·利用C++ Builder 5.0创建用户自己的网上聊天程序
·C++ Builder 中的自画功能
·C++Builder IDE使用技巧与快捷键
·C++ Builder下数据库报表Master/Detail关系功能的实现
·WINDOWS下的动态鼠标光标控制
·菜鸟入门 认识C#中的委托和事件
·QuickReport基本知识
·C++BUILDER中一些实现界面效果的技巧
·C#动态生成树型结构的Web程序设计
·利用C++ Builder开发动画DLL
·BCB中实现全屏幕OpenGL
·C++Builder注册表编程实例详解
·利用C++Builder遍历文件目录

Win95下高精度定时器的实现

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]



国防科技大学机电工程与仪器系
张云洲 梁科山

---- 在工业控制软件中,数据采集和实时控制是经常性的工作。目前,工业控制软件已经从DOS和Windows3.x平台,转到了Windows95上。然而,Windows95并不能直接支持中断,这就意味着在DOS和Windows3.x中的定时器中断不能为我们所用。因此,我们必须寻求新的定时方式。

---- 在C++ Builder和Delphi等典型的编程语言中,都提供了定时器控件,可以方便地实现定时和事件响应。此外,Windows95还提供了SetTimer和KillTimer函数来设置和删除一个定时器,在事件WM_TIMER响应函数中实现处理。然而,遗憾的是,通过这些方式获得的Win95定时器最小只能精确到55毫秒,对于55毫秒以下的时间精度便无能为力。这对于Win95下测控软件的开发是十分不利的。幸运的是,多媒体定时器可以解决这一难题。

---- 以下是一个完整的多媒体定时器设计示例程序,该定时器的精度为1毫秒。该程序的内容十分简单:按下按钮1,启动定时器,在Edit框中显示定时值(计数值),按下按钮2则将关闭定时器。此程序在Windows95环境下,采用C++Builder3.0编程并编译通过,但设计思想同样适用于其它高级语言。按照本程序中的实现方法,读者将可以轻松实现自己的高精度定时器。

---- 程序清单如下:

#include < vcl.h >
#pragma hdrstop

#include "mmsystem.h"   //包含多媒体定时器函数的头文件
#define MilliSecond  1  //定时间隔1毫秒
#define Accuracy     1  //系统允许的分辨率最小值

#define Min(x,y)  ((x < y) ? x : y)
#define Max(x,y)  ((x > y) ? x : y)

#include "HighTimerU.h"
//------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
UINT TimerID;    //定义定时器句柄
int count;       //定义一个变量以进行计数
int TimerAccuracy;
TForm1 *Form1;
//------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}

void PASCAL TimerCallProc(UINT  
TimerID, UINT msg,DWORD dwUser,
           DWORD dwa,DWORD dwb)  
//定义定时器事件的调用函数
{
    count++;
    Form1- >Edit1->Text=count;   
//在一个编辑框内显示计数值,即定时值
}

//---------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TIMECAPS timecaps;
    int TimerResolution;

//从系统获得关于定时器服务能力的信息,
//分辨率不能超出系统许可值(1到16毫秒)
  if (timeGetDevCaps(&timecaps,sizeof(
TIMECAPS))==TIMERR_NOERROR)
      TimerAccuracy=Min(Max(timecaps.wPeriodMin,
Accuracy),timecaps.wPeriodMax);

    timeBeginPeriod(TimerAccuracy);  
//设置定时器分辨率
  
    TimerResolution=1;    //设置定时间隔为1毫秒

   //产生间隔1毫秒,周期执行的定时器事件;启动定时器
    TimerID = timeSetEvent(TimerResolution,TimerAccuracy,
                        &TimerCallProc,1,TIME_PERIODIC);
}
//-------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    timeKillEvent(TimerID);        //删除定时器事件
    timeEndPeriod(TimerAccuracy);  //清除定时器分辨率
}
---- 多媒体定时器对实现高精度定时是很理想的工具,而且其精度是十分可靠的。但是,多媒体定时器也并不是完美的。因为它可靠的精度是建立在对系统资源的消耗之上的。因此,在利用多媒体定时器完成工作的同时,必须注意以下几点:
---- 1. 多媒体定时器的设置分辨率不能超出系统许可范围。

---- 2. 在使用完定时器以后,一定要及时删除定时器及其分辨率,否则系统会越来越慢。

---- 3. 多媒体定时器在启动时,将自动开辟一个独立的线程。在定时器线程结束之前,注意一定不能再次启动该定时器,不然将迅速造成死机。


[1] [2] 下一页 




上一篇:将指定目录的结构装入TreeView中

下一篇:WINDOWS下的动态鼠标光标控制

Win95下高精度定时器的实现 相关文章:
·如何实现局域网打印机共享
·TCP/IP编程实现远程文件传输
·Visual C++ 实现数字化图像的分割
·ASP.NET购物车的实现及结算处理
·一个Struts实现分页,增删改查,Tiles,国际化的DEMO
·用C语言实现Ping程序功能
·javascript+xml实现二级下拉菜单,不会被任何标签或元素遮住
·windows 2003服务器配置VPN实现各种网络环境VSS协同开发
·让Windows XP操作系统实现全速启动
·如何实现一个表格表头不动tbody区域用滚动条可以滚动
Win95下高精度定时器的实现 相关软件:
·TCP-IP详解卷2:实现
·ASP.NET的网站新闻管理系统设计与实现
·内置对象实现超酷日历
·定时器 V3.4
·ASP.NET下MVC设计模式的实现
·使用关键字实现上传木马
·数据库系统实现
·TCP-IP详解卷二:实现
· JS+层实现分项多内容的提交
·实用-不间断滚动的实现方法

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn