最近要用到高精度的計時器,去網上查了資料。自已調試了下,做成了一個簡單的C語言接口!
main.c文件
#include <stdio.h>
#include <Windows.h>
#define TRACE_CMH printf
extern "C" long long GetCurTime();
extern "C" double GetTimeConsume(long long start, long long end);
int main(int argc, char* argv)
{
for (int i=0; i<10; ++i)
{
long long startTime = GetCurTime(); //開始時間
Sleep(100);
long long endTime = GetCurTime(); //結束時間
double consume = GetTimeConsume(startTime, endTime);
TRACE_CMH("%f(us)\n", consume);
}
system("pause");
return 0;
}
timer.c 文件
/**************************************************************************
* @Copyright (c) 2014, ChenMH, All rights reserved.
* @file : Tag_PCI_9054.cpp
* @version : ver 1.0
* @author : ChenMH
* @date : 2014/09/09 09:57
* @brief : Windows平臺下的高精度計時器,可以精確到微秒級!
**************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <Windows.h>
#define MS 1000000; //時間精度:微秒
static LARGE_INTEGER litmp;
static double dfMinus,dfFreq,dfTim;
/********************************************************
* @function : GetCurTime
* @brief : 獲取定時器的當前計數值
* @author : ChenMH 2014/08/18 10:29
********************************************************/
long long GetCurTime()
{
//如果硬件支持,獲取當前計數值
if(QueryPerformanceFrequency(&litmp))
QueryPerformanceCounter(&litmp);
else
return 0;
return litmp.QuadPart;
}
/********************************************************
* @function : GetTimeConsume
* @brief : 通過開始和結束的兩個計數值,來計算時間消耗。
* @author : ChenMH 2014/08/18 10:39
********************************************************/
double GetTimeConsume(long long start, long long end)
{
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; //定時器的頻率
dfMinus = (double)(end - start);
dfTim = (dfMinus/dfFreq); //轉換爲秒
return dfTim * MS; //轉換爲微秒
}
#ifdef __cplusplus
}
#endif