#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;
uint32 StartTime, StopTime;
if( StartTime = clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
StartTime = start.tv_sec + 0.0000000001 * start.tv_nsec;
system( argv[1] ); // or it could be any calculation
if( StopTime = clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
StopTime = stop.tv_sec + 0.0000000001 * stop.tv_nsec;
accum = StopTime - StartTime;
printf( "%lf\n", accum );
return EXIT_SUCCESS;
}
该程序计算所需的时间 执行指定为其第一个参数的程序。 标准输出时间以秒为单位打印。 我正在计算开始时间和停止时间来执行一些计算。我能够获得计算的开始时间和停止时间,但是无法找到开始和停止时间之间的差异,即累积。有谁可以帮我这个?
答案 0 :(得分:0)
删除StartTime
和StopTime
。声明这个函数:
double to_double(struct timespec t) {
return t.tv_sec + 0.0000000001 * t.tv_nsec;
}
你会以这种方式获得deltatime:
accum = to_double(stop) - to_double(start);
答案 1 :(得分:0)
问题是StartTime
和StopTime
都被定义为整数类型。计算结果不是整数,但由于表达式的左侧是整数,结果会被截断到整数部分。从本质上讲,您将丢失tv_nsec
字段提供的详细信息。
根据评论中的建议,声明StartTime
和StopTime
为双倍修复。
更改
uint32 StartTime, StopTime;
到
double StartTime, StopTime;