#c #time #c99 #time.h
#c #время #c99 #time.h
Вопрос:
Я пытаюсь выяснить, как вычислить миллисекунды между некоторыми подключениями к программированию сокетов в C99, но получаю 0 мс на C99 и возвращает фактическое значение на терминале mac. Я включил временные части своего кода.
Инициализация:
struct timeval start,end;
double t1,t2;
t1 = 0.0;
t2 = 0.0;
начало работы:
t1 =start.tv_sec (start.tv_usec/1000000.0);
Завершение операции:
t2 =end.tv_sec (end.tv_usec/1000000.0);
А затем просто печать фактического времени в мс:
printf("Sent........RTT = %g msn",(t2-t1)/100);
Комментарии:
1. Я бы беспокоился о потенциально больших значениях tv_sec, вызывающих огромную потерю точности значений msec. Я бы сначала вычел два вторых значения. Или используйте очень большие целые числа, чтобы хранить все в мсек.
2. не могли бы вы, пожалуйста, немного пояснить? я не совсем понимаю вас
3. Что вы подразумеваете под «c99»? Linux? Окна? Что-то еще?
4. C99 — это компилятор с изданием C. 1999 года . Я не думаю, что действительно имеет значение, в какой системе он существует, если он у вас включен. Пожалуйста, поправьте меня, если я ошибаюсь. @ричи
5. Функция, которую вы используете для получения времени, является Posix, а не частью какого-либо стандарта C, и ее реализация (и точность) зависят от операционной системы, а не от компилятора.
Ответ №1:
Предполагая, что вы timeval
правильно обновляете структуры, вы вычисляете не миллисекунды, а целые секунды, и вы печатаете разницу, деленную на 100, а не умноженную на 1000. Вы потеряете меньшую точность, вычисляя разницу во времени:
diff = (end.tv_sec - start.tv_sec) * 1000.0 end.tv_usec / 1000.0 - start.tv_usec / 1000.0;
...
printf("Sent........RTT = %g msn", diff / 100);