首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
安全知识 :: 专题文章

C 时间控制函数


http://www.gipsky.com/
几个时间控制函数



随着软硬件的飞速发展,计算机技术已经广泛地应用到自动化控制领域,为了实现实时控制,控制程序必须能够精确地完成定时和计时功能。VC提供了很多关于时间操作的函数,下面根据它们精度的不同,分别进行说明。



  一般时控函数



  VC程序员都会利用Windows的WM?TIMER消息映射来进行简单的时间控制:1.调用函数SetTimer()设置定时间隔,如 SetTimer(0,200,NULL)即为设置200毫秒的时间间隔;2.在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理语句,用来完成时间到时的操作。这种定时方法是非常简单的,但其定时功能如同Sleep()函数的延时功能一样,精度较低,只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况,而在精度要求较高的条件下,这种方法应避免采用。



  精度时控函数



  在要求误差不大于1毫秒的情况下,可以采用GetTickCount()函数,该函数的返回值是DWORD型,表示以毫秒为单位的计算机启动后经历的时间间隔。使用下面的编程语句,可以实现50毫秒的精确定时,其误差小于1毫秒。



  DWORD dwStart, dwStop;



  // 起始值和终止值



  dwStop = GetTickCount();



  while(TRUE)



  {



   dwStart = dwStop;



  // 上一次的终止值变成新的起始值



  // 此处添加相应控制语句



   do



   {



  dwStop = GetTickCount();



   } while(dwStop - 50  LARGE?INTEGER litmp;



  LONGLONG QPart1,QPart2;



  double dfMinus, dfFreq, dfTim;



  QueryPerformanceFrequency(&litmp);



  // 获得计数器的时钟频率



  dfFreq = (double)litmp.QuadPart;



  QueryPerformanceCounter(&litmp);



  // 获得初始值



  QPart1 = litmp.QuadPart;



  Sleep(100) ;



  QueryPerformanceCounter(&litmp);



  // 获得终止值



  QPart2 = litmp.QuadPart;



  dfMinus = (double)(QPart2 - QPart1);



  dfTim = dfMinus / dfFreq;



  // 获得对应的时间值

  执行上面程序,得到的结果为dfTim=0.097143767076216(秒)。细心的读者会发现,每次执行的结果都不一样,存在一定的差别,这是由于Sleep()自身的误差所致。



  本文介绍了三种定时或计时的实现方法,读者可以根据自己的实际情况进行选择,以达到程序的定时和计时功能。以上程序均在VC 6.0、Windows 98环境下调试通过。



  摘自《赛迪网》 孙鹤泉/文
<< C 中对sprintf()函数的说明 使用 SendARP 查询 MAC 地址 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号