高精度计时器(微秒级)

时间:2022-08-03 08:54:24

最近要用到高精度的计时器,去网上查了资料。自已调试了下,做成了一个简单的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