我試圖用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