使用C++和Linux的高分辨率计时器?

oko*_*man 46 c++ linux timer

在Windows下也有像一些方便的功能,QueryPerformanceCountermmsystem.h创建高分辨率定时器.Linux有类似的东西吗?

Nik*_*man 32

之前有人问过它- 但基本上,你可以使用一个boost ptime函数,或者一个POSIX clock_gettime()函数,它可以起到基本相同的作用.

  • @lothar:+1表示ACE库的指针,谢谢.你给的链接是陈旧的,这是一个新的链接:http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html (3认同)

gri*_*eve 30

对于Linux(和BSD),您希望使用clock_gettime().

#include <sys/time.h>

int main()
{
   timespec ts;
   // clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD
   clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux
}
Run Code Online (Sandbox Code Playgroud)

请参阅:此答案以获取更多信息

  • 当然,您需要了解`CLOCK_MONOTONIC`和`CLOCK_REALTIME`之间的区别 - 前者在系统启动时将其零点设置为任意值,因此仅用于两个`CLOCK_MONOTONIC`测量之间的相对比较(但不受壁钟调整的影响) (7认同)
  • clock_gettime(CLOCK_MONOTONIC,&ts); 也适用于Linux. (6认同)

tjd*_*tjd 8

这是一个描述如何在Linux和Windows上进行高分辨率计时的链接......不,不要使用RTSC.

https://web.archive.org/web/20160330004242/http://tdistler.com/2010/06/27/high-performance-timing-on-linux-windows


Mar*_*n G 5

对于 C++11,请使用std::chrono::high_resolution_clock.

例子:

#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;

int main()
{
    auto t1 = Clock::now();
    auto t2 = Clock::now();
    std::cout << "Delta t2-t1: " 
              << std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
              << " nanoseconds" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Delta t2-t1: 131 nanoseconds
Run Code Online (Sandbox Code Playgroud)