C 延时函数

在 C 语言编程中,有时候我们需要让程序停顿一下,等一等再继续执行,此时就需要用到 “延时函数” 了。

不过 C 语言标准库并没有统一的延时函数,因此在 Windows 系统和 Linux/macOS 系统下,我们需要使用不同的头文件和函数。这一点初学者非常容易踩坑,小伙伴们一定要注意区分。

常用的延时函数

根据操作系统的不同,常用的延时函数主要分为以下 2 类。

1. Windows 系统

在 Windows 下,我们需要引入 <windows.h> 头文件,然后使用 Sleep() 函数。

语法:

#include <windows.h>

Sleep(毫秒数)

说明:

注意,Sleep() 函数中的 “S” 是大写的。其中,Sleep(1000); 表示延时 1 秒。

2. Linux / macOS 系统

在 Linux 或 macOS 下,我们需要引入 <unistd.h> 头文件,常用的函数有 sleep() 和 usleep() 这两个。

语法:

#include <unistd.h>

sleep(秒数)
usleep(微秒数)

说明:

usleep() 用于实现更精准的延时。其中,sleep(1); 表示延时 1 秒,而 usleep(1000000); 表示延时 1 秒。

C 延时函数示例

为了让代码能够在不同的电脑上都能运行,在实际开发中我们一般会先使用 “预处理指令(#ifdef)” 来判断当前操作系统,然后再选择正确的头文件和函数。

示例 1:跨平台的延时程序

#include <stdio.h>

// 根据操作系统引入不同的头文件
#ifdef _WIN32
    #include <windows.h>  // Windows 系统
#else
    #include <unistd.h>   // Linux/macOS 系统
#endif

int main(void)
{
    printf("开始倒计时...\n");
    
    printf("3\n");
    // 根据操作系统调用不同的函数
    #ifdef _WIN32
        Sleep(1000);      // Windows: 单位是毫秒,1000ms = 1s
    #else
        sleep(1);         // Linux: 单位是秒
    #endif

    printf("2\n");
    #ifdef _WIN32
        Sleep(1000);
    #else
        sleep(1);
    #endif

    printf("1\n");
    #ifdef _WIN32
        Sleep(1000);
    #else
        sleep(1);
    #endif

    printf("出发!\n");
    return 0;
}

运行结果如下(每隔 1 秒打印一行)。

开始倒计时...
3
2
1
出发!

分析:

在这个例子中,我们使用了 #ifdef _WIN32 来判断当前是否是 Windows 系统。

  • 如果是 Windows,则程序会包含 <windows.h> 并调用 Sleep(1000)。
  • 如果是 Linux 或 macOS,则程序会包含 <unistd.h> 并调用 sleep(1)。

这种写法虽然看起来稍微复杂一点,但它具有很好的可移植性,无论在谁的电脑上跑都不会报错。

示例 2:在循环中使用延时

#include <stdio.h>

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
#endif

int main(void)
{
    char* colors[3] = {"红灯", "黄灯", "绿灯"};
    
    // 模拟交通信号灯
    for (int i = 0; i < 3; i++)
    {
        printf("当前状态:%s\n", colors[i]);
        
        // 延时 2 秒
        #ifdef _WIN32
            Sleep(2000);
        #else
            sleep(2);
        #endif
    }
    
    return 0;
}

运行结果如下。

当前状态:红灯
(等待 2 秒...)
当前状态:黄灯
(等待 2 秒...)
当前状态:绿灯

分析:

在这个例子中,我们利用 for 循环 遍历字符串数组,然后配合延时函数,来模拟了一个简单的交通信号灯切换效果。如果没有延时函数,这三行字会瞬间打印出来,就看不到 “切换” 的过程了。

最后,我们再强调一下单位换算,小伙伴们千万别搞错了:

  • Windows Sleep():毫秒。其中,Sleep(1000) = 1 秒。
  • Linux sleep():秒。其中,sleep(1) = 1 秒。
  • Linux usleep():微秒。其中,usleep(1000000) = 1 秒。

上一篇: C 获取当前时间

下一篇: C 取整

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号