2010-08-03 39 views

回答

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下很容易的事 - 事实上这是两个std::clock, d相同的功能<ctime>

1

您应该使用的函数取决于您需要的计时器的分辨率。其中一些提供10ms分辨率。这些功能更易于使用。其他人需要更多的工作,但提供更高的分辨率(并且在某些环境中可能会导致一些令人头疼的问题,尽管您的开发机器可能工作正常)。

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

该文章中提到:

  • timeGetTime
  • RDTSC(处理器功能,而不是操作系统的功能)
  • QueryPerformanceCounter的
2

您可以使用Windows API功能GetTickCount()并比较st艺术和结束。分辨率在16毫秒的球场内。如果由于某种原因,您需要更细粒度的时机,您需要查看QueryPerformanceCounter

0

C++适用于多种平台。为什么不使用也适用于许多平台的东西,例如Boost库。

看为Boost Timer Library

的文档,我相信这是一个只有头库,这意味着它是简单的设置和使用...