你永远不可能得到纳秒级的精确度。想想你在问什么:在1 GHz的CPU上,1纳秒是一个时钟周期。无论你试图调用什么,你永远不会得到那样的精确度,你最好坚持在微秒。这里有一个例子很多的类似问题:C++跨平台高分辨率定时器。
仅适用于c语言:在windows上,您希望使用QueryPerformanceCounter。下面是关于QPC的更多内容。这里有一个关于如何使用QueryPerformanceCounter的相关问题。
不管您如何处理这个问题,也不管您使用的是哪种类型的System/OS,您最多只能得到一个近似的答案,由于问题的性质,会有相当大的差异。
第二,你需要一个支持这种调用的系统。如果你使用QNX中微子,这很容易:
http://www.qnx.com/developers/docs/6.3.0sp3/neutrino/lib_ref/C/clock_gettime.html
/*
* This program calculates the time required to
* execute the program specified as its first argument.
* The time is printed in seconds, on standard out.
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#define BILLION 1000000000L;
int main( int argc, char** argv )
{
struct timespec start, stop;
double accum;
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
system( argv[1] );
if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
accum = ( stop.tv_sec - start.tv_sec )
+ (double)( stop.tv_nsec - start.tv_nsec )
/ (double)BILLION;
printf( "%lf\n", accum );
return EXIT_SUCCESS;
}
标准C中的