獲取系統時間(精確到微秒),驅動中KeQueryPerformanceCounter,Win32程式QueryPerformanceCounter
LARGE_INTEGER KeQueryPerformanceCounter( IN PLARGE_INTEGER PerformanceFrequency OPTIONAL );
其中PerformanceFrequency 表示CPU的頻率,此函式返回系統從啟動到此刻的時間,型別為LARGE_INTEGER。
使用舉例:
ULONG QuerySystemTime()
{
LARGE_INTEGER CurTime, Freq;
CurTime = KeQueryPerformanceCounter
return (ULONG)((CurTime.QuadPart * 1000)/Freq.QuadPart);
}
這個函式的精度為1ms,如果想要得到微秒,則把 1000 改為 1000000。
2.在應用程式中精確獲取系統時間,則使用下面函式:
QueryPerformanceCounter(IN OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
但這是獲取CPU頻率就需要下面這個函數了:
QueryPerformanceFrequency(IN OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
例子:
*****************************************************test.cpp******************************************************************
#include <stdio.h>
#include <Windows.h>
LONGLONG GetLastTime()
{
// CPU頻率
LARGE_INTEGER liQPF;
// 記錄開始和結束時間
LARGE_INTEGER liStartTime, liEndTime;
// 記錄過程時間
LONGLONG llLastTime;
// 獲取CPU頻率
QueryPerformanceFrequency(&liQPF);
// 獲取開始時間
QueryPerformanceCounter(&liStartTime);
Sleep(10);
// 獲取結束時間
QueryPerformanceCounter(&liEndTime);
// 計算持續時間(us)
llLastTime = 1000000 * (liEndTime.QuadPart - liStartTime.QuadPart) / liQPF.QuadPart;
return llLastTime;
}
int main(void)
{
DWORD start,stop;
start = GetTickCount();
Sleep(10);
stop = GetTickCount();
printf("%d ms\n",stop-start); //GetTickCount()計算得到的時間間隔精度為15ms,例如計算10ms間隔結果為0
printf("%d us\n",GetLastTime());//應用程式中時間間隔計算精確到us,QueryPerformanceCounter()
return 0;
}