在Windows系统中,有一些方便的函数(如mmsystem.h
中的QueryPerformanceCounter
)可以创建高分辨率的计时器。那么,在Linux系统中是否有类似的功能?
这个问题曾经在这里提出过--但基本上,你可以使用boost ptime函数或POSIX clock_gettime()函数来实现基本相同的目的。
对于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
}
详见: 此答案获取更多信息
CLOCK_MONOTONIC
和 CLOCK_REALTIME
之间的区别——前者在系统启动时将其零点设定为任意值,因此仅适用于两个 CLOCK_MONOTONIC
测量之间的相对比较(但不受壁钟调整的影响)。请注意,这并不改变原来的意思。 - bdonlan这里有一篇链接,介绍如何在Linux和Windows上进行高分辨率定时...不要使用RTSC。
使用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