【问题标题】:time in milliseconds in c99?c99中的时间以毫秒为单位?
【发布时间】:2019-09-11 06:16:46
【问题描述】:

我试图弄清楚如何计算 C99 中一些套接字编程连接之间的毫秒数,但在 C99 上得到 0 ms 并在 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 ms\n",(t2-t1)/100);

【问题讨论】:

  • 我会担心潜在的大 tv_sec 值会导致毫秒值精度的巨大损失。我会先减去两个第二个值。或者使用非常大的整数以毫秒为单位保存所有内容。
  • 您能详细说明一下吗?我不完全理解你
  • “c99”是什么意思? Linux?视窗?还有什么?
  • C99 是 1999 版 C 的编译器。如果启用它,我认为它存在于哪个系统上并不重要。如果我错了,请纠正我。 @rici
  • 你用来获取时间的函数是 Posix,不是任何 C 标准的一部分,它的实现(和精度)取决于操作系统,而不是编译器。

标签: c time c99 time.h


【解决方案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 ms\n", diff / 100);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多