Windows平台的计时器

原创 2012年03月26日 17:35:41

Windows平台下,常用的计时器有两种:

1, TimeGetTime计时器,它可以提供毫秒级ms的计时。但这个精度对很多应用场合而言还是不够精确的。

例子:

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "winmm")//告诉程序要链接winmm.lib,VC中路径:VC98-->lib-->winmm.lib
main()
{
DWORD t1, t2;
t1 = timeGetTime();
Sleep(50);
t2 = timeGetTime();
printf("Start Time:    %uμs\n", 1000*t1);
printf("End Time:      %uμs\n", 1000*t2);
printf("Lasting Time: %uμs\n",(1000*t2-1000*t1));
}
2,QueryPerformanceCount计数器

此计数器随系统的不同可以提供微秒级μs的计数,如果硬件里有定时器,它就会启动这个定时器,并且不断获取定时器。
这样的定时器精度,就跟硬件时钟的晶振一样精确的。当需要更高精度计时时就需要使用QUeryPerformanceCounter来查询定时器的计数值。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,

善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。

//Timer2.cpp 使用QueryPerformanceCounter函数(查询定时器的计数值,其时间跟频率有关,例如Frequency为25000000,则每计数一次消耗0.04μs)    

//编译行:CL timer3.cpp /link KERNEl32.lib

#include <windows.h>
#include <stdio.h>
main()
{
LARGE_INTEGER t1, t2, tf;
QueryPerformanceFrequency(&tf);
printf("Frequency: %u\n", tf.QuadPart);
QueryPerformanceCounter(&t1);
Sleep(50);
QueryPerformanceCounter(&t2);
printf("Start Time:    %u\n", 1000000*t1.QuadPart);
printf("End Time:      %u\n", 1000000*t2.QuadPart);
printf("Lasting Time: %uμs\n",(1000000*t2.QuadPart-1000000*t1.QuadPart)/tf.QuadPart);
}
   /////////////////////////////////执行结果//////////////////////////////////
       Frequency:     25000000               Frequency:     25000000
  ①Start Time:     401052736          ②Start Time:     3144881664     
       End Time:       2553536896             End Time:       3878562048
       Lasting Time: 49907 μs                  Lasting Time: 50881 μs
   ////////////////////////////////////////////////////////////////////////////
可见,TimeGetTime函数的精确度是到ms,一旦到达μs级位数则为零,而QueryPerformanceCounter函数则可精确到μs级。

Java计时器Timer的使用!...

import javax.swing.JFrame; import javax.swing.Timer; import java.awt.event.ActionListener; impor...
  • friendan
  • friendan
  • 2011年11月30日 18:25
  • 12175

Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)

Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)         在完成winodws平台上的caffe环境的搭建之后,亟待掌握的就是如何在caffe中进行训练与学习...
  • FRD2009041510
  • FRD2009041510
  • 2016年12月03日 15:29
  • 748

51单片机计时器中断

单片机中,中断算是一个比较重要的部分,在51单片机中有八种中断方式 ,其中常用的的有五种,分别是外部中断0,计时器中断0,外部中断1,计时器中断1,和串口中断。今天主要介绍的是计时器中断。     ...
  • q392493617
  • q392493617
  • 2016年08月13日 09:24
  • 2594

Android 实现一个计时器

最近,在做一个Android项目,需要用到一个计时器。特此,拿来和大家分享一下。 首先,看一下实现效果图。 实现思路主要利用Handler中的postDelayed (Runnable r, lo...
  • nxiangbo
  • nxiangbo
  • 2016年01月14日 14:16
  • 3760

windows下eclipse运行hdfs API常见问题

在windows下写hdfs的java API常见问题: 准备:例如访问hdfs需要对应的jar包,可以在hadoop解压包里找(common+hdfs核心包+hdfs依赖的lib包),也可以通过m...
  • qq_32563713
  • qq_32563713
  • 2018年01月25日 09:14
  • 33

计时器和回调函数

mfc计时器直接使用SetTimer(),原型如下: UINT_PTR SetTimer( UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 ...
  • lfzzlx
  • lfzzlx
  • 2015年06月25日 21:45
  • 556

Unity计时器设计 - 基础计时器

设计一个计时器,可用于动画、BUFF、延时函数等各种和时间相关的操作和类设计。...
  • lil_black
  • lil_black
  • 2017年01月19日 16:41
  • 3122

iOS——NSTimer的使用,计时器的简单创建

NSTimer用到的地方很多,这里仅以计时器作为例子,里面的代码可以应用在很多程序中。 以下是全部的源码。 #import "ViewController.h" @interface ViewC...
  • w582324909
  • w582324909
  • 2016年09月19日 08:47
  • 5494

谈谈RIP协议中的计时器

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 本文是如下wen
  • JXH_123
  • JXH_123
  • 2014年04月28日 10:38
  • 1154

用原生JS实现一个简单的计时器demo

今天实习第一次写代码,很简单,实现一个计时效果,但是我还是折腾了很久。。。 为自己的智商感到惶恐。各种白痴错误啊 下面是代码 function settime(a){ ...
  • viana37
  • viana37
  • 2016年02月23日 18:08
  • 3240
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows平台的计时器
举报原因:
原因补充:

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