在 Windows 平台上,QueryPerformanceCounter (QPC) 配合 QueryPerformanceFrequency 提供微秒級甚至納秒級的高精度計時,遠優於 clock() 或 GetTickCount()。
QueryPerformanceFrequency(&freq):獲取計數器頻率(每秒計數數),存於 LARGE_INTEGER freq。QueryPerformanceCounter(&start):獲取當前計數值。QueryPerformanceCounter(&end):獲取結束計數值。elapsed_ms = (end.QuadPart - start.QuadPart) * 1000 / freq.QuadPart;
elapsed_us = (end.QuadPart - start.QuadPart) * 1000000 / freq.QuadPart;
#include
#include
#include
using namespace std;
int main() {
// 設定輸出格式:固定小數點,10 位精度
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout << setprecision(10);
LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// ---- 待測試代碼區 ----
for (int i = 0; i < 100000; ++i) {
cout << " ";
}
// ----------------------
QueryPerformanceCounter(&end);
long long elapsed_ms = (end.QuadPart - start.QuadPart) * 1000 / freq.QuadPart;
double elapsed_sec = (double)(end.QuadPart - start.QuadPart) / freq.QuadPart;
cout << "Elapsed (ms): " << elapsed_ms << endl;
cout << "Elapsed (s) : " << elapsed_sec << endl;
system("pause");
return 0;
}
QuadPart 為 64 位有號整數,長時間運行差值不會溢位。clock_gettime(CLOCK_MONOTONIC, &ts)(納秒精度)。std::chrono::high_resolution_clock(封裝了平台相關的高精度時鐘)。