c - 在c中实现时间延迟

标签 c time sleep delay timedelay

我不知道如何准确地搜索这个..所以我没有找到任何东西..:S

我需要在 C 中实现时间延迟。

例如我想做一些事情,然后等待 1 分钟,然后继续做事情。

这有意义吗?谁能帮帮我?

最佳答案

在标准 C (C99) 中,您可以使用 time() 来执行此操作,例如:

#include <time.h>
:
void waitFor (unsigned int secs) {
    unsigned int retTime = time(0) + secs;   // Get finishing time.
    while (time(0) < retTime);               // Loop until it arrives.
}

顺便说一下,这假定 time() 返回 1 秒分辨率值。我不认为这是标准强制要求的,因此您可能需要针对它进行调整。


为了澄清,这是我所知道的使用 ISO C99 执行此操作的唯一方法(并且问题仅标记为“C”,这通常意味着可移植解决方案是可取的,当然,仍然可以提供特定于供应商的解决方案)。

无论如何,如果您使用的平台提供了更高效的方法,请使用它。正如一些评论所指出的,像这样的紧密循环可能会出现特定问题,关于 CPU 使用率和电池生命周期。

任何体面的时间片操作系统都能够降低连续使用其完整时间片的任务的动态优先级,但电池电量可能会有更多问题。

但是 C 指定没有关于托管环境中的操作系统细节,这个答案是针对 ISO C 和单独的 ISO C(所以没有使用 sleep选择、Win32 API 调用或类似的东西)。

请记住 POSIX sleep可以被信号中断。如果您要沿着这条路走下去,您需要做如下事情:

int finishing = 0; // set finishing in signal handler 
                   // if you want to really stop.

void sleepWrapper (unsigned int secs) {
    unsigned int left = secs;
    while ((left > 0) && (!finishing)) // Don't continue if signal has
        left = sleep (left);           //   indicated exit needed.
}

关于c - 在c中实现时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930363/

相关文章:

c - linux中使用socket C进行身份验证的问题

c# - 如何从 ElapsedEventHandler 中调用异步方法

java - 线程 hibernate ,不做

javascript - 短时间后更改回图像源

stddev/mean 的 C 程序

java - 如何从java调用C lib文件函数

objective-c - 无法在 OSX 上从 64 位进程加载 32 位 dylib,反之亦然?

c++ - 使用 clock() 函数测量程序的运行时间

java - 我的时钟不显示秒增加

linux - 在超过十亿个文件的目录执行 "tar"时,进程停留在D状态