【问题标题】:What is the most efficient way to "sleep" for an arbitrary amount of time in c?在c中“睡眠”任意时间的最有效方法是什么?
【发布时间】:2017-05-24 19:13:51
【问题描述】:

是否有一个只是休眠的函数。时间长短不是问题。 应该用什么方法不影响电脑性能?

【问题讨论】:

  • 无论您的操作系统提供什么。
  • 此外,时间量通常是一个问题,因为 OS sleep() 样式调用的粒度为毫秒级。对于通用操作系统来说,较短的睡眠时间很尴尬,而“睡眠时间”要长得多,即。以天为单位,最好由进程外操作系统调度程序提供,例如。像 cron 或 Windows 调度程序。
  • 前面有很多问题,here is one
  • 你建议如何判断你选择的什么都不做的方法是否“有效”?

标签: c


【解决方案1】:

Unix 变体通常提供sleep(seconds)usleep(microseconds)usleep() 已被弃用,取而代之的是 POSIX nanosleep()。 Windows提供Sleep( sometime_in_millisecs )

窗户:

#include <windows.h>
#include <stdio.h>

int main() {
    printf( "starting to sleep...\n" );
    Sleep( 3000 );   // sleep three seconds
    printf( "sleep ended\n" );
}

Linux(Unix):

#include <unistd.h>

//unsigned int sleep(unsigned int seconds);

int main() {
    sleep( 3 ); // sleep 3 seconds
    usleep( 3000000 ); // sleep 3 seconds more
    return( 0 );
}

【讨论】:

  • 请注意usleep 已过时
【解决方案2】:

假设你使用的是 Linux 平台,有一个标准的 C 函数可以休眠几微秒。

#include <unistd.h>
unsigned int usec;
...
usleep(usec);

调用Sleep时,程序从运行状态退出,当睡眠时间结束后重新进入就绪状态,因此对CPU时间没有影响。届时其他进程/线程可能会利用 CPU。 如果 usleep 在您使用的 Unix 变体上不可用,或者,您可以使用 sleep,粒度以秒为单位,

unsigned int sleep(unsigned int seconds);

【讨论】:

  • usleep 不是“标准 C 函数”。
  • usleep() 是一个过时的 POSIX 函数;在 POSIX 中仍然可用的是 sleepnanosleep。还有来自threads.hthrd_sleep; C11 中的标准,但在 glibc 中仍然不受支持。
猜你喜欢
  • 2011-09-10
  • 2014-06-28
  • 1970-01-01
  • 2011-06-12
  • 2016-09-22
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多