Как измерить время в секундах между двумя символами, когда пользователь вводит их в качестве ввода - PullRequest
0 голосов
/ 21 июня 2019

Как измерить время вставки в секундах?

Я пытался использовать:

struct timeval t1,t2;

Я проверил время перед вставкой ввода:

gettimeofday(&t1,NULL);

и то же самое после получения ввода:

gettimeofday(&t2,NULL);
double elapsedTime=(t2.tv_sec - t1.tv_sec)*10000.0;

но это совсем не точно !!

Мне нужен лучший способ измерить секунды в Время вставки и узнать разницу в секундах при вставке каждого символа.

// trying to insert 5 chars
for(i=0; i<=4 ; i++)
{        
    gettimeofday(&t1,NULL);    //get time before getting char
    c=getchar();
    gettimeofday(&t2,NULL);    //get time after geting char             
    elapsedTime=(t1.tv_sec - t2.tv_sec)*10000.0;
    printf("\n char number %d his elapsed time =%d\n",i,elapsedTime);
}

Мне нужно знать частоту секунд, при вставке «кликающих» символов в качестве входных данных и для вычисления elapsedTime в секундах:

вывод должен быть таким:

time between inserting first character and the second is : 0.002 seconds
time between..........second character and the third is:  1.008 seconds

Ответы [ 2 ]

2 голосов
/ 21 июня 2019
elapsedTime=(t1.tv_sec - t2.tv_sec)*10000.0;

Вы принимаете во внимание только tv_sec.фактическая временная структура имеет tv_sec , а также tv_usec часть, которые оба являются целыми числами, не содержащими дроби (хотя точный тип не гарантируется)

tv_sec содержит секунды, а tv_usec - микросекунды.

также гарантируется, что tv_usec всегда меньше 1000000, что означает, что вам нужно только рассчитать их разницу по отдельности.

и вы такжевыполнив t1-t2, вы должны изменить его на t2-t1, так как t2 - последний временной интервал.вот почему вы получаете отрицательные времена.

elapsedTime=((double) (t2.tv_sec - t1.tv_sec))+((double) (t2.tv_usec - t1.tv_usec) / 1000000.0);

, который возвращает время в формате "sec.usec", который должен быть достаточно точным:)

обратите внимание, что вам нужно объявить elapsedTimeкак double вместо int, а также замените второй «$ d» в printf на «% f».

, вам также нужно учитывать, что ввод с клавиатуры буферизован , что означает, что вы 'блокируется в getchar () до нажатия Enter, затем буфер подается в getchar, один символ при вызове.вы можете использовать просто Enter в качестве входного символа для проверки точности кода, но чтобы использовать его с реальными символами, вам нужно использовать небуферизованный ввод.

Документы GNU: 21.2 Истекшее время

0 голосов
/ 21 июня 2019

В моей системе использование подсчета clock () в миллисекундах, возможно, этого достаточно для ваших целей:

#include "time.h"

clock_t c1=clock();
... doing stuff ...
clock_t c2=clock();
printf("diff %i clocks with CLOCKS_PER_SEC = %i\n",c2-c1,CLOCKS_PER_SEC);
...