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

46

在Windows系统中,有一些方便的函数(如mmsystem.h中的QueryPerformanceCounter)可以创建高分辨率的计时器。那么,在Linux系统中是否有类似的功能?


跨平台C++11标准高分辨率计时器 - legends2k
6个回答

31

这个问题曾经在这里提出过--但基本上,你可以使用boost ptime函数或POSIX clock_gettime()函数来实现基本相同的目的。


不知道Boost提供计时器功能。谢谢 :) - okoman
1
或者使用ACE库中的HighResTimer。 - lothar
3
@lothar: 感谢提供ACE库的指针,点赞。你给出的链接已经失效,这里是一个新链接:http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html。 - BD at Rivenhill

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
}

详见: 此答案获取更多信息


8
当然,你需要意识到 CLOCK_MONOTONICCLOCK_REALTIME 之间的区别——前者在系统启动时将其零点设定为任意值,因此仅适用于两个 CLOCK_MONOTONIC 测量之间的相对比较(但不受壁钟调整的影响)。请注意,这并不改变原来的意思。 - bdonlan

8

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;
}

输出:

Delta t2-t1: 131 nanoseconds

1
在我看来,没有比Qt的QTime类更易于使用的跨平台计时器了。

1

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