寻找C++执行时间

5

我想知道C++中是否有一种内置的函数可以测量执行时间? 目前我正在使用Windows系统。在Linux系统中很容易实现...

6个回答

4
据我所知,在Windows系统上,最好的方法是使用QueryPerformanceCounterQueryPerformanceFrequency函数。

QueryPerformanceCounter(LARGE_INTEGER*)函数将性能计数器的值存储到传递的LARGE_INTEGER变量中。

QueryPerformanceFrequency(LARGE_INTEGER*)函数将性能计数器增加的频率存储到传递的LARGE_INTEGER变量中。

你可以在执行开始时记录计数器的值,然后在执行结束时记录计数器的值。通过减去开始时的计数器值来得到计数器的变化值,然后除以频率就可以得到以秒为单位的执行时间。

LARGE_INTEGER start, finish, freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// Do something
QueryPerformanceCounter(&finish);
std::cout << "Execution took " 
    << ((finish.QuadPart - start.QuadPart) / (double)freq.QuadPart) << std::endl;

2
在 Windows 下也很容易 - 实际上在两个平台上都是相同的函数,即在 <ctime> 中定义的 std::clock, d

2
您可以使用Windows API函数GetTickCount(),并比较开始和结束的值。分辨率约为16毫秒。如果您需要更精细的计时,您需要查看QueryPerformanceCounter

1

1
你应该使用的函数取决于你需要的计时器分辨率。其中一些函数提供10毫秒的分辨率,这些函数更容易使用。其他函数需要更多的工作,但提供更高的分辨率(在某些环境下可能会引起一些问题,但你的开发机器可能没有问题)。

http://www.geisswerks.com/ryan/FAQS/timing.html

这篇文章提到:

  • timeGetTime
  • RDTSC(一个处理器特性,而不是操作系统特性)
  • QueryPerformanceCounter

0

C++ 可以在多个平台上使用。为什么不使用同样适用于多个平台的东西,例如 Boost 库。

查看 Boost 计时器库 的文档。

我相信这是一个仅有头文件的库,这意味着它简单易用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接