利用 C++ Builder 进行精确计时
虽然Win95下可视化开发工具如VC、Delphi、C++Builder等都有专用的定时器控件Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。不过Microsoft公司在 Win32API 函数库中已经为用户提供了一组用于高精度计时的底层函数,如果用户使用得当,计时精度可到1ms。这个计时精度、对于一般的实时系统控制完全可以满足要求。现将由C++ Builder 4.0提供的重新封装后的一组与时间相关的主要接口函数(函数名、参数、功能与Win32 API基本相同)说明如下:
1.DWORD timeGetTime(void)
返回从Windows启动开始经过的毫秒数。最大值为232,约49.71
天。
2.MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent )
该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回NULL。参数说明如下:
uDelay:以毫秒指定事件的周期。
UResolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
LpTimeProc:指向一个回调函数。
DwUser:存放用户提供的回调数据。
FuEvent:指定定时器事件类型:
TIME_ONESHOT:uDelay毫秒后只产生一次事件
TIME_PERIODIC:每隔uDelay毫秒周期性地产生事件。
3.MMRESULT timeKillEvent(UINT uTimerID)
该函数取消一个指定的定时器回调事件。uTimerID标识要取消的事件(由timeSetEvent函数返回的标识符)。如果成功则返回TIMERR_NOERROR,如果定时器时间不存在则返回MMSYSERR_INVALPARAM。
void CALLBACK TimeProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 );
该函数是一个应用程序定义的回调函数,出现定时器事件时该函数被调用。TimeProc是应用程序定义的函数名的占位符。使用该函数时要注意的是,它只能调用以下有限的几组API函数:
PostMessage,
timeGetSystemTime,
timeGetTime,
timeSetEvent,
timeKillEvent ,
midiOutShortMsg,
midiOutLongMsg,
OutputDebugString。
同时也不要使用完成时间很长的API函数,程序尽可能简短。使用以上一组函数就可以完成毫秒级精度的计时和控制(在C++Builder中使用时要将头文件mmsystem.h加到程序中)。由于将定时控制精确到几毫秒,定时器事件将占用大量的CPU时间和系统资源,所以在满足控制要求的前提下,应尽量将参数uResolution的数值增大。而且定时器实时控制功能完成后要尽快释放。
分享到:
相关推荐
本文将详细介绍如何利用C++ Builder来进行精确计时,并提供相关的API函数介绍与使用方法。 #### C++ Builder简介 C++ Builder是一款由Embarcadero Technologies公司开发的强大IDE(集成开发环境),它支持快速应用...
这些控件包括按钮、文本框、列表视图、表格、菜单、工具栏等,它们都是在C++ Builder中进行可视化设计的基础。通过VCL,开发者可以方便地拖放控件到表单上,然后通过编写代码实现功能交互。 这份大全可能包含的详细...
C++ 计时类,计时精度可达微秒级。下载后,直接包含Timing.h头文件,即可使用。
这可以通过添加额外的代码实现,可以利用C++Builder的类库,如System.Classes、System.IOUtils等。 6. **资源管理**:确保所有的图片、音频或其他资源文件被正确地包含在项目中,并在运行时能够访问。这可以通过在...
利用C++Builder做的一个计时器,可以设定时间,进行倒计时功能。
1.1.1 C++ Builder的集成开发环境 1.1.2 C++ Builder控件的使用方法 1.1.3 有关计算器制作中用到控件的介绍 1.2 编程思路 1.3 操作步骤 1.4 创意与超越 1,5 本章小结 第2章 单窗口文本...
在"C++Builder 6.0编写简易的时钟"这个主题中,我们将探讨如何利用C++Builder 6.0的基本功能和VCL组件来创建一个简单的时钟程序。 首先,启动C++Builder 6.0 IDE,创建一个新的VCL Forms Application项目。这将自动...
7. **GDI+与DirectX**:除了VCL库,C++Builder还可以利用GDI+或DirectX进行更底层的图形渲染,实现更高性能的动画效果。DirectX尤其适用于游戏开发和其他对性能要求极高的场景。 8. **动画序列**:通过组合多个简单...
【C++Builder最终课程设计】涉及的是开发一个【人事信息管理系统】,主要目的是实现员工信息的录入、删除、刷新、浏览及查询等操作。在这个项目中,学生【阚江涛】在指导教师【刘敏侠】的指导下,于2006年1月9日完成...
VCL组件库源于Borland Delphi的OWL库,是C++Builder特有的资源,它为开发者提供了大量的预定义组件,如按钮、编辑框、表格、菜单等,这些组件可以直观地拖放到窗体上,并通过属性、方法和事件进行定制。VCL组件基于...
实验分为两个部分,第一个部分是利用定时器进行倒计时功能处理,第二个部分是利用定时器实现文字闪烁功能处理。 一、实验目的: 实验的目的是让学生掌握定时器控件的使用方法,并进一步掌握菜单控件的使用方法,为...
总结来说,这个C++Builder实例展示了如何利用C++和VCL组件来创建一个简单的定时自动关机程序,通过调用操作系统API实现控制电脑关机的功能。对于初学者,这是一次了解系统级编程和事件驱动编程的好机会。
在C++ Builder中,可以通过TTimer组件的Enabled属性来控制计时器是否运行,每次计时器触发时,累加相应的时间值,并更新显示。 然而,描述中提到分钟刻度、时针和分针的实现尚未完成。在模拟时钟的可视化设计中,这...
C++ Builder中可以使用TTimer组件或自定义计时器来实现超时功能。 5. **错误处理**:当扫描过程中遇到网络错误,如连接失败、拒绝连接、超时等,需要捕获异常并给出适当的反馈。 6. **用户界面**:虽然这是一段...
本篇文章将深入探讨如何利用C++ Builder来设定程序使用时间和有效地运用多线程技术。 首先,让我们来看看如何在C++ Builder中设定程序的使用时间。这通常涉及到计时器组件的应用。C++ Builder提供了TTimer组件,...
《C++ Builder深度历险》一书并非传统的编程教材,而是侧重于通过一系列具体的主题,如计时器、控制台、桌面技术、游戏软件等,展现C++ Builder在实际项目中的应用技巧。这些主题看似简单,实则蕴含着深层次的技术...
《C++Builder深度历险》是一本由陈昇瑋(原名:陈宽达)编写的书籍,该书深入探讨了使用C++Builder进行软件开发过程中可能遇到的各种技术问题及其解决方案。本书不仅仅关注C++Builder的基本使用方法,更着重于通过一...
C++ Builder是一款强大的集成开发环境(IDE),它提供了一个面向对象的编程环境,专门用于使用C++语言进行Windows应用程序开发。在这个项目中,我们看到开发者已经实现了一个具有秒表功能的模拟数字时钟,尽管时针和...
【C++ Builder 类比时钟】是一个使用C++ Builder开发的桌面应用程序,它...这个小程序是学习C++ Builder和桌面应用开发的一个很好的实例,通过它,开发者可以深入理解如何利用C++ Builder创建动态、交互的应用程序。
在C++ Builder中获取CPU信息是一项常见的系统编程任务,它涉及到操作系统接口的使用以及系统信息的解析。以下是一篇详细讲解如何使用C++ Builder获取CPU信息的教程。 首先,了解CPU信息通常包括:CPU型号、核心数、...