【问题标题】:What could be the format specifier for the below program?以下程序的格式说明符可能是什么?
【发布时间】:2014-03-06 12:42:51
【问题描述】:
void TASK(Task100ms_Raster)
{
    int a,b,c;
    struct timespec start, stop;
    uint32 StartTime, StopTime;
    uint32 duration100ms;

    if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
       perror( "clock gettime" );
    }

    StartTime =start.tv_sec + 0.0000001 * start.tv_nsec;
    printf("start time is %lu", StartTime);

    printf("value is %d",c);
    printf("ETAS1\n");
    if( (StopTime = clock_gettime( CLOCK_REALTIME, &stop)) == -1 )
    {
      perror( "clock gettime" );
    }
    StopTime =  stop.tv_sec + 0.0000001 * stop.tv_nsec;
    printf("stop time is %lu", StopTime);

    duration100ms = StopTime -StartTime;
    printf( "time difference is= %lu\n", duration100ms );
}

我创建了一个计时器,它计算开始时间、停止时间和时间差。我对开始时间、停止时间和 suration100ms 的格式说明符感到困惑。但是 struct timespec 开始,停止;是http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/t/timespec.html 类型,那么获得结果的正确格式说明符可能是什么。一些指导我。

【问题讨论】:

  • uint32 不是标准类型。
  • 我忘记添加 :typedef unsigned long uint32;

标签: c++ c linux timer format-specifiers


【解决方案1】:

您正在执行浮点计算以计算秒数,但将结果存储在整数中:

StartTime = start.tv_sec + 0.0000001 * start.tv_nsec;

这会将结果截断为整数。你应该把StartTime 变成double,然后打印出来:

double StartTime = start.tv_sec + 1e-9 * start.tv_nsec;

printf("start time is %f\n", StartTime);

我认为在计算差异时将精度转换为浮点数会更好:

double duration = StopTime.tv_sec - StartTime.tv_sec +
                  1E-9 * (StopTime.tv_nsec - StartTime.tv_nsec);

如果您必须将持续时间作为整数,以 100 毫秒为单位,您可以这样做:

duration = 10000 * (StopTime.tv_sec - StartTime.tv_sec) + 
           (StopTime.tv_nsec - StartTime.tv_nsec) / 100000000;

【讨论】:

  • 在我的情况下,持续时间是 uint32 类型;
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 2013-06-22
  • 1970-01-01
  • 2010-11-03
  • 2012-01-05
  • 2012-01-31
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多