利用C++Builder进行精确计时

原创 2001年04月11日 13:35:00

 

 利用C++Builder进行精确计时<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     虽然Win95下可视化开发工具如VC、Delphi、C++Builder等都有专用的定时器控件Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。不过Microsoft公司在Win32
      API函数库中已经为用户提供了一组用于高精度计时的底层函数,如果用户使用得当,计时精度可到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的数值增大。而且定时器实时控制功能完成后要尽快释放。

计时器--精确到10毫秒(精确度可以自行设定)

package com.example; import java.util.Timer; import java.util.TimerTask; import android.app.Activi...
  • ada498607067
  • ada498607067
  • 2014年08月04日 08:59
  • 659

CUDA进阶补充篇:详析各种CUDA函数计时函数

写在前面:之前写了一篇CUDA进阶第三篇:CUDA计时方式,列出了几种当时遇到的CUDA计时方式,只是个教程式的东西,没有太多技术含量,也不太全面。前几天在CUDA Professional(4515...
  • litdaguang
  • litdaguang
  • 2017年08月25日 20:28
  • 516

Java中更精确的计时

Java中更精确的计时 我们一般的java运输计时代码是   1 long begintime = System.currentTimeMillis(); 2 3 //运算代码...
  • u010607947
  • u010607947
  • 2017年08月02日 16:49
  • 61

python中程序运行计时的三种方式

程序运行时间测试
  • marchphy
  • marchphy
  • 2016年01月14日 16:08
  • 2542

Windows 各种计时函数总结

本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock...
  • shenshen211
  • shenshen211
  • 2016年09月20日 19:29
  • 771

C++ 程序精确计时

精确的时间计时,有时候是非常必要的。比如播放多媒体时视频与音频的时间同步,还有在测试代码的性能时,也需要使用到非常精确的时间计时。还有测试硬件的性能时,也需要精确的时间计时。这时就需要使用QueryP...
  • rixodx
  • rixodx
  • 2013年01月28日 14:04
  • 198

C/C++中如何精确计时

给程序计时对于程序员来说实在是太重要了,在windows上的那个clock()实在是不够精确,精度只有10ms,真让人难过。研究了下windows下使用C、C++计时的函数,给大家分享下。   主要就...
  • xiaohang721
  • xiaohang721
  • 2013年12月09日 19:03
  • 254

C/C++中如何精确计时

http://blog.csdn.net/bendanban/article/details/7673607 给程序计时对于程序员来说实在是太重要了,在windows上的那个clock()实在是不够精...
  • Augusdi
  • Augusdi
  • 2013年09月21日 23:26
  • 1874

windows下精确定时总结

windows下精确定时总结本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使...
  • qu710458643
  • qu710458643
  • 2016年05月26日 15:07
  • 1605

JavaScript中的高精度计时

HRT(High Resolution Timing, 高精度计时)在一些场合有很大的作用,比如游戏开发中,需要精确的计算两帧之间的时间差。 在JS中常常用(new Date())....
  • maodoudou1217
  • maodoudou1217
  • 2015年10月22日 23:07
  • 513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用C++Builder进行精确计时
举报原因:
原因补充:

(最多只允许输入30个字)