如何在C语言中延迟一个函数?

4

我找不到合适的指南,所以我想问如何在C语言中延迟函数执行。换句话说,在继续执行其他函数之前,程序如何等待一定数量的秒?

例如:

printf("First Function.\n");

//program waits a certain number of seconds before executing next command

printf("Second function executed after certain amount of seconds");

我想知道,我用什么命令可以实现这个?
delay();

顺便说一下,对我来说不起作用。

我必须补充说明,sleep()也不起作用。


1
你想要使用 sleep() - Chris
2
Unix 上的 sleep,Windows 上的 Sleep - aschepler
1
我建议您谷歌一下这个问题的标题。 - Weather Vane
4
标准的 C 语言中没有这种功能。解决方案是针对特定操作系统(或操作系统系列)。例如,在 Unix 下使用 sleep(),在 Windows 下使用 Sleep()。您需要阅读目标系统和相关的 API 文档。 - Peter
3
“*sleep() doesn't work either.*”这句话的意思是什么?请更具体一些!您在哪个平台上遇到了这些问题? - alk
显示剩余2条评论
4个回答

7

sleep是您所寻找的。


(翻译:sleep是您需要的函数。)
printf("First Function.\n");

sleep(20);  // Replace 20 with the "certain amount"

printf("Second function executed after certain amount of seconds")

最新的文档在这里:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sleep.html - alk

1
您可以使用Sleep()或select来添加延迟。

1
我很好奇为什么sleep()不是线程安全的。 - Dolda2000
我编辑了我的答案,不知道为什么,但是我习惯在线程中使用select来进行延迟,而sleep的文档明确表示只有调用线程会停止。 - Pras
也许你在想 pselect(),它与线程安全无关,但是它是异步信号安全的。 - Dolda2000

1

sleep() 函数是 POSIX 标准的。如果需要更高精度,还有 POSIX 函数 nanosleep()

C11 中也有 thrd_sleep() 函数(在 threads.h 中),但据我所知, glibc 仍不支持此函数。

可以使用 time.h 中的函数实现一个简单的可移植的 sleep 函数:

#include <stdio.h>
#include <time.h>

void my_sleep(unsigned);
void delay_print(char *);

int main(void)
{
    delay_print("What is taking so long?");
    delay_print("Glad that's over!");
}

void my_sleep(unsigned duration)
{
    time_t start = time(NULL);
    double end = duration;
    time_t now;
    do {
        now = time(NULL);
    } while (difftime(now, start) < end);
}

void delay_print(char *msg)
{
    my_sleep(5);
    puts(msg);
}

由于“轮询”的原因,这会吸取所有可用的CPU周期,因此可能不是最佳方法。 - user3629249
@user3629249-- 我确实写了“简单的睡眠函数”,我认为在我的回答中这是隐含的,可以在没有任何适当的库函数的情况下使用。我认为大多数操作系统都会检测负载并进行调整。我不确定是否有一种可移植的方法来做到这一点并避免CPU开销,但我很乐意看到其他选择 :) - ad absurdum
我有一个矛盾的问题。我在Windows 11上安装了MinGW和Eclipse,但是发现synchapi.h中有Sleep(10);,而unistd.h中有sleep(10);,为什么会这样? - mohammadsdtmnd
@mohammadsdtmnd -- 我不理解 "conflictingly"。synchapi.h 是一个仅适用于 Windows 的头文件,它声明了一个 Sleep 函数;unistd.h 是声明 sleep 的 Posix 头文件。你可以在同一系统上同时拥有这两个头文件。 - ad absurdum

0

您可以轻松地使用:

sleep(unsigned int seconds);   //   from the unistid.h
Sleep(int milliseconds);       //   from the Windows.h

POSIX的sleep()函数需要一个unsigned int参数。 - alk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接