【发布时间】:2017-07-25 11:53:38
【问题描述】:
我正在尝试使用 linux 和 Vxworks 测量 C++ 程序中的进程所花费的时间。我注意到clock_gettime(CLOCK_REALTIME, timespec) 足够准确(分辨率约为1 ns)可以在许多Oses 上完成这项工作。对于可移植性问题,我正在使用这个函数并在 Vxworks 6.2 和 linux 3.7 上运行它。 我试图测量一个简单的打印所花费的时间:
#define <timers.h<
#define <iostream>
#define BILLION 1000000000L
int main(){
struct timespec start, end; uint32_t diff;
for(int i=0; i<1000; i++){
clock_gettime(CLOCK_REALTME, &start);
std::cout<<"Do stuff"<<std::endl;
clock_gettime(CLOCK_REALTME, &end);
diff = BILLION*(end.tv_sec-start.tv_sec)+(end.tv_nsec-start.tv_nsec);
std::cout<<diff<<std::endl;
}
return 0;
}
我在 linux 和 vxworks 上编译了这个。对于 linux,结果似乎是合乎逻辑的(平均 20 µs)。但是对于 Vxworks,我有很多零,然后是 5000000 ns,然后是很多零...... PS,对于 vxwroks,我在 ARM-cortex A8 上运行了这个应用程序,结果似乎是随机的 有没有人见过同样的错误,
【问题讨论】:
-
This 看起来和我很像,可能问题出在目标平台而不是 vxworks。