我正在尝试以微秒为单位做一个计时器,但它不太管用。
#include <time.h>
#include <iostream>
#include <unistd.h>
using namespace std;
int main ()
{
struct timespec start_time;
struct timespec end_time;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
usleep(5000);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
cout << "START: " << (start_time.tv_nsec/1000) << endl;
cout << "END: " << (end_time.tv_nsec/1000) << endl;
cout << "DIFF: " << (end_time.tv_nsec - start_time.tv_nsec) /1000 << endl;
return 0;
}
结果是这样的:
START: 3586
END: 3630
DIFF: 43
我需要 DIFF 在 5000 左右。有什么建议吗?
最佳答案
我不确定你要测量什么,但我猜 CLOCK_PROCESS_CPUTIME_ID
是错误的计时器,如果你想测量一些耗时,你可能需要 CLOCK_MONOTONIC
时间。看看 similar stackoverflow question这显示了 clock_gettime
的不同时钟之间的差异。
也就是说,要获得完整的时间,您必须添加 tv_sec
和 tv_nsec
(当然首先将 tv_sec
转换为纳秒)每次测量然后减去总和,所以像这样:
uint64_t startNs = start_time.tv_sec * 1000 * 1000 * 1000 + start_time.tv_nsec;
uint64_t endNs = end_time.tv_sec * 1000 * 1000 * 1000 + end_time.tv_nsec;
uint64_t diffNs = endNs - startNs;
uint64_t diffMicro = diffNs / 1000;
如果你使用的是 C++11,最好使用一些 high level class来自 chrono 命名空间。
关于C++ 定时器(以微秒为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186201/