QueryPerformanceCounter给个例子,我在C++环境,需要计算一个函数的持续时间
时间: 2024-11-20 19:41:27 浏览: 5
在C++环境中,你可以使用`QueryPerformanceCounter`和`QueryPerformanceFrequency`来测量函数执行的高精度时间。下面是一个简单的例子,展示了如何测量一个函数的执行时间[^1]:
```cpp
#include <windows.h>
#include <iostream>
// 函数开始时记录性能计数器
void startTimer(LARGE_INTEGER& counterStart) {
QueryPerformanceCounter(&counterStart);
}
// 函数结束时再次记录性能计数器
void stopTimer(LARGE_INTEGER& counterEnd, LARGE_INTEGER freq, double& elapsedTime) {
QueryPerformanceCounter(&counterEnd);
LONGLONG diff = counterEnd.QuadPart - counterStart.QuadPart;
elapsedTime = static_cast<double>(diff) / freq.QuadPart;
}
double measureFunctionTime(void (*func)(), void* param = nullptr) {
LARGE_INTEGER counterStart, counterEnd;
if (QueryPerformanceFrequency(NULL)) { // 获取性能计数器频率
startTimer(counterStart);
func(param); // 测量的函数调用
stopTimer(counterEnd, counterStart, elapsedTime);
return elapsedTime;
} else {
std::cerr << "QueryPerformanceFrequency failed" << std::endl;
return 0; // 如果无法获取频率,返回0表示无法测量
}
}
int main() {
double elapsed;
elapsed = measureFunctionTime([]() {
// 这里放你要测量的具体代码
// 示例:for (int i = 0; i < 1000000; ++i)
// {}
});
std::cout << "Function execution time: " << elapsed << " seconds" << std::endl;
return 0;
}
```
在这个例子中,`startTimer`记录开始时间,`stopTimer`记录结束时间,然后计算两个计数器之间的差并除以频率得到时间间隔。注意,`QueryPerformanceCounter`可能不适用于每个线程,因此通常建议在一个单独的线程中使用它。
阅读全文