《Windows核心编程》のWindows时间

本文介绍了Windows系统中时间的获取和设置方法,包括GetLocalTime、GetSystemTime等API函数的使用,以及如何通过GetTickCount和QueryPerformanceCounter实现精确的时间间隔测量。
摘要由CSDN通过智能技术生成

Windows时间的获取和设置:

Win32编程中,常用的获取系统时间的函数是有两个,即GetLocalTimeGetSystemTime

void WINAPI GetLocalTime(

  __out  LPSYSTEMTIME lpSystemTime

);

void WINAPI GetSystemTime(

  __out  LPSYSTEMTIME lpSystemTime

);

这两个函数的区别是GetLocalTime返回当前的时间,而GetSystemTime返回当前的格林威治时间,这两个函数把返回的时间信息放在了lpSystemTime参数中。

 

SYSTEMTIME结构定义如下:

typedef struct _SYSTEMTIME {

  WORD wYear;

  WORD wMonth;

  WORD wDayOfWeek; //星期

  WORD wDay;

  WORD wHour;

  WORD wMinute;

  WORD wSecond;

  WORD wMilliseconds;

} SYSTEMTIME, *PSYSTEMTIME;

 

相应地,设置系统时间的函数分别是:

BOOL WINAPI SetLocalTime(

  __in  const SYSTEMTIME *lpSystemTime

);

BOOL WINAPI SetSystemTime(

  __in  const SYSTEMTIME *lpSystemTime

);

 

代码实例如下:

#include <windows.h>

#include <stdio.h>

 

void main()

{

    SYSTEMTIME st, lt;

   

    GetSystemTime(&st);

    GetLocalTime(&lt);

   

    printf("The system time is: %02d:%02d/n", st.wHour, st.wMinute);

    printf(" The local time is: %02d:%02d/n", lt.wHour, lt.wMinute);

}

 

 

计算时间间隔:

时间戳函数GetTickCount用来返回Windows本次启动以来的ms数:

DWORD WINAPI GetTickCount(void);

由于函数返回的是一个32位数,可以表示的范围是1~0xffffffff ms,所以当Windows连续运行49.7天后,计数器会清零并重新开始。该函数主要用来计算两个时间点的间隔,在WindowsNT/2000/XP系统下,函数的精度是10ms

 

为了得到更精确的时间间隔值,我们可以使用Windows高精度时间戳函数。Windows在内部维护了一个高精度的计时器,计时的精度取决于计算机的硬件速度。

 

QueryPerformanceFrequency函数可以获取该计时器每秒钟的计数值:

BOOL WINAPI QueryPerformanceFrequency(

  __out  LARGE_INTEGER *lpFrequency //64位计数值

);

根据函数返回的计数值lpFrequency,可以算出计时器的精度为1 000 000/lpFrequency 微秒。

 

QueryPerformanceCounter函数可用来获取高精度计时器的计数值:

BOOL WINAPI QueryPerformanceCounter(

  __out  LARGE_INTEGER *lpPerformanceCount

);

当两次调用该函数得到的计数值是X1X2,而每秒计数值(调用QueryPerformanceFrequency得到的)为Y时,则时间间隔就是:

(X2-X1)*1 000 000/Y (微秒)

 

 

 

相关文章可见:WindowsAPI巡礼》---GetSystemTimeGetFileTimehttp://blog.csdn.net/ACE1985/archive/2010/07/13/5731795.aspx

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值