如何解决这个linux Timer错误

时间:2014-02-25 14:02:31

标签: c linux timer clock

#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;
  }

该程序计算所需的时间         执行指定为其第一个参数的程序。        标准输出时间以秒为单位打印。 我正在计算开始时间和停止时间来执行一些计算。我能够获得计算的开始时间和停止时间,但是无法找到开始和停止时间之间的差异,即累积。有谁可以帮我这个?

2 个答案:

答案 0 :(得分:0)

删除StartTimeStopTime。声明这个函数:

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)

问题是StartTimeStopTime都被定义为整数类型。计算结果不是整数,但由于表达式的左侧是整数,结果会被截断到整数部分。从本质上讲,您将丢失tv_nsec字段提供的详细信息。

根据评论中的建议,声明StartTimeStopTime为双倍修复。

更改

uint32 StartTime, StopTime;

double StartTime, StopTime;