время в миллисекундах в c99?

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