Что может быть спецификатором формата для приведенной ниже программы?

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. но структурируйте timepec start, stop; имеет тип http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/t/timespec.html тогда какие могут быть правильные спецификаторы формата для получения результатов. некоторые направляют меня.

-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;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]