我试图用Linux和Vxworks测量C++程序中的进程所花费的时间。我注意到clock_gettime(CLOCK_REALTIME,timespec)足够准确(分辨率约为1 ns),可以在许多Oses上完成这项工作。对于一个可移植性问题,我使用这个函数并在Vxworks 6.2和linux 3.7上运行它。 我已经尽力衡量一个简单的打印所需的时间:如何在Vxworks中正确运行Clock-gettime以获得准确的时间
#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的,我已经得到了很多零,那么500万纳秒,那么很多的零... PS,对于vxwroks,我拼命地跑在ARM-Cortex A8的这个应用程序,以及结果似乎随机 已经有人看到了同样的错误前,
[这](https://stackoverflow.com/questions/13474000/arm-performance-counters-vs-linux-clock-gettime)类似于我,也许问题是与目标平台,而不是VxWorks的。 – Steeve