《Windows核心编程》のWindows时间

来源:互联网 发布:sql中自定义变量 编辑:程序博客网 时间:2024/04/30 11:32

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

 

 

 

原创粉丝点击