【问题标题】:Can I pass a timeval as argument to sleep?我可以通过 timeval 作为睡眠的参数吗?
【发布时间】:2020-08-04 19:31:52
【问题描述】:

我可以传递一个 timeval 结构作为睡眠函数的参数吗?我想这样做是因为 timeval 结构可以变得非常精确,因为你可以控制微秒,我想睡一定的微秒。我可以这样做吗?

【问题讨论】:

  • 如果您的问题真的是“我可以将 timeval 作为参数传递给 sleep”,那么答案是“不,你不能”。如果您的问题是“如何在 C 中以微秒分辨率延迟执行”,那么答案是“使用 nanosleep”。请不要问 XY 问题。
  • 大多数 POSIX 睡眠函数总是很吵,所以如果你需要一个非常精确的延迟量,你可能需要一个低级的 OS 函数。
  • 即使你告诉它要睡多长时间,你真正告诉它的只是至少要睡多长时间,直到它被允许醒来。操作系统/调度程序不需要在时间过去后唤醒它。

标签: c time sleep timeval


【解决方案1】:

你可以这样做:

struct timeval {long tv_sec; long tv_usec;};

struct timezone {int tz_minuteswest; int tz_dsttime; };    

   struct timeval tp;
   struct timezone tzp;
   int i;

   i = gettimeofday(&tp,&tzp);

使用它可以实现延迟功能。请参阅this example

但是,如果您想要精确的延迟,您可以使用能够获得更精确延迟的函数,例如 nanosleep()

struct timespec tim, tim2;
tim.tv_sec = 1;
tim.tv_nsec = 1000000000L; //1,000,000,000 nanoseconds = 1 second

nanosleep(&tim , &tim2);
/*code after 1 second sleep*/

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2014-05-14
    • 2020-02-11
    • 2010-12-10
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多