admin 管理员组

文章数量: 1087139


2024年3月18日发(作者:git clone远程项目)

Windows核心编程》のWindows时间

Windows时间的获取和设置:

在Win32编程中,常用的获取系统时间的函数是有两个,即GetLocalTime和GetSystemTime:

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

#include

void main()

{

SYSTEMTIME st, lt;

GetSystemTime(&st);

GetLocalTime(<);

printf("The system time is: %02d:%02dn", , e);

printf(" The local time is: %02d:%02dn", , e);

}

计算时间间隔:

时间戳函数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

);

当两次调用该函数得到的计数值是X1和X2,而每秒计数值(调用QueryPerformanceFrequency

得到的)为Y时,则时间间隔就是:

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


本文标签: 函数 时间 返回 高精度