头文件:Windows.h 作用:返回硬件支持的高精度计数器的频率。 返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
此函数要求计算机要从硬件上支持高精度定时器。 函数原型:
//返回计算机内部计时器的时钟频率 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); //返回程序运行至此的记数 BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);在用此函数时,先通过QueryPerformanceFrequency()求出时钟频率来初始化,判断计算机是否支持此函数。通过程序运行前后的QueryPerformanceCounter()之差,再除去时钟频率来计算程序运行时间。
用C++把函数封装:
//ConputeTime.h #pragma once #include <iostream> #ifndef ComputeTime_h #define ComputeTime_h class ComputeTime { private: int Initialized; __int64 Frequency; __int64 BeginTime; public: bool Avaliable(); double End(); bool Begin(); ComputeTime(); virtual ~ComputeTime(); }; #endif //ComputeTime.cpp #include "ComputeTime.h" #include <iostream> #include <Windows.h> //QueryPerformanceFrequency函数需要Windows头文件 ComputeTime::ComputeTime() { Initialized = QueryPerformanceFrequency((LARGE_INTEGER *)&Frequency); //LARGE_INTEGER是64位的有符号整数 } ComputeTime::~ComputeTime() { } bool ComputeTime::Begin() { if (!Initialized) return 0; return QueryPerformanceCounter((LARGE_INTEGER *)&BeginTime); } double ComputeTime::End() { if (!Initialized) return 0; __int64 endtime; QueryPerformanceCounter((LARGE_INTEGER *)&endtime); __int64 elapsed = endtime - BeginTime; return ((double)elapsed / (double)Frequency)*1000.0; //单位由秒变为毫秒 } bool ComputeTime::Avaliable() { return Initialized; }可以看出测试时间很精确(单位毫秒)
注:代码来自论文Grabcut in One Cut的实现代码。