【问题标题】:How can I express 10 milliseconds using timeval?如何使用 timeval 表示 10 毫秒?
【发布时间】:2009-06-10 19:30:49
【问题描述】:

如何使用 timeval 表示 10 毫秒?

这是我目前所拥有的:

struct timeval now;
now.tv_usec =10000; 

【问题讨论】:

    标签: c unix


    【解决方案1】:

    struct timeval 将时间表示为秒数 (tv_sec) 加上 0 到 999,999 之间的微秒数 (tv_usec)。因此,要表示 10 毫秒,您将使用 10,000 微秒,正如您所建议的那样:

    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 10000;
    

    【讨论】:

    • 只是一个小点。根据gnu.org/s/hello/manual/libc/Elapsed-Time.html,tv_usec 值始终小于一百万,即介于 0 和 999,999 之间。否则,您可以在 tv_sec 和 tv_usec 字段中表示一秒,根据它们的定义,这没有意义。
    • @binarybob 好点,如果你必须为微秒分配正确大小的字符缓冲区,实际上并没有那么小
    【解决方案2】:

    对于将毫秒转换为 timeval 结构的更一般情况:

    int milliseconds = 10;
    struct timeval now;
    now.tv_sec = milliseconds / 1000;
    now.tv_usec = (milliseconds % 1000) * 1000;
    

    【讨论】:

      【解决方案3】:

      这是

       struct timeval {
          int tv_sec;    // seconds 
          int tv_usec;   // microseconds!
      

      现在。

      tv_sec = 0;
      tv_usec = 10000; 
      

      ` 是对的

      【讨论】:

      • 除了 tv_sec 字段(可能)未初始化,因此可能不为零。将其显式设置为零会更安全,以便明确意图。
      • 但是,在这种情况下,tv_sec 将无法正确初始化,这可能会产生问题。 memset() 或将零分配给 tv_sec。
      猜你喜欢
      • 2013-09-10
      • 2017-09-15
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多