0

0

c++ sleep函数怎么用_c++程序延时实现

穿越時空

穿越時空

发布时间:2026-01-05 13:10:32

|

957人浏览过

|

来源于php中文网

原创

C++11起应优先使用std::this_thread::sleep_for()和sleep_until(),需配合和,传入std::chrono持续时间类型;避免POSIX sleep/usleep及Windows Sleep()等非标准函数,确保跨平台与类型安全。

c++ sleep函数怎么用_c++程序延时实现

sleep_for 和 sleep_until 是 C++11 起的标准做法

不要用 sleep()usleep() 这类 POSIX 函数,它们不是 C++ 标准,跨平台编译会失败(比如在 Windows MSVC 下直接报错 undefined reference)。C++11 引入了 std::this_thread::sleep_for()std::this_thread::sleep_until(),依赖 头文件,可移植、类型安全。

常见错误是传错时间单位:必须用 std::chrono 的持续时间类型(如 std::chrono::secondsstd::chrono::milliseconds),不能直接传整数毫秒。

  • 延时 500 毫秒:std::this_thread::sleep_for(std::chrono::milliseconds(500))
  • 延时 2 秒:std::this_thread::sleep_for(std::chrono::seconds(2))
  • 避免写成 sleep_for(500) —— 编译不过

Windows 下 _sleep() 和 Sleep() 容易混淆

Windows SDK 提供两个相似函数:_sleep()(来自 ?错,它实际在 ,已废弃且仅旧 MS-DOS 兼容环境支持)和真正可用的 Sleep()(注意首字母大写,参数单位是毫秒,需包含 )。

典型陷阱:

立即学习C++免费学习笔记(深入)”;

  • Sleep(1000) 延时 1 秒 —— 正确
  • sleep(1000)(小写)在 Windows 下不声明,链接时报错 LNK2019: unresolved external symbol sleep
  • _sleep(1000) 在现代 Visual Studio 中找不到定义,编译失败
/* Windows-only, not portable */
#include 
int main() {
    Sleep(1500); // 暂停 1.5 秒
    return 0;
}

Linux/macOS 下 nanosleep() 比 usleep() 更可靠

usleep(500000) 看似能休眠 500ms,但它已被标记为 obsolete(POSIX.1-2008 废弃),且某些系统上精度差、易被信号中断后提前返回。推荐用 nanosleep(),它支持纳秒级、可重入、中断后能续休。

Lovart
Lovart

全球首个AI设计智能体

下载

关键点:

  • 参数是 struct timespec,不是毫秒整数
  • 必须检查返回值:若返回 -1 且 errno == EINTR,说明被信号打断,需手动重试
  • 别漏掉 #include #include
/* Linux/macOS 推荐(非 C++ 标准,但比 usleep 稳定) */
#include 
#include 
void safe_nanosleep(long ms) {
    struct timespec ts = {ms / 1000, (ms % 1000) * 1000000};
    while (nanosleep(&ts, &ts) == -1 && errno == EINTR);
}

sleep_for 在循环中卡死?小心 std::chrono::steady_clock 偏移

如果用 sleep_for() 写定时循环(比如每秒打印一次),但发现间隔越来越不准,可能是因为用了 system_clock 或没考虑线程调度延迟。正确做法是基于 steady_clock 计算下次唤醒时间,而不是固定间隔调用 sleep_for()

例如,想严格每 1000ms 执行一次任务,应记录上次执行时间,下一次目标时间为 last + 1s,再用 sleep_until() 补齐偏差。

  • 错误写法:while(true) { do_work(); sleep_for(1s); } → 实际间隔 = 执行耗时 + 1s
  • 正确写法:auto next = steady_clock::now() + 1s; while(true) { do_work(); sleep_until(next); next += 1s; }
  • 尤其在负载高或 do_work() 耗时波动大时,后者才能维持稳定周期

C++ 延时看似简单,但跨平台、精度控制、中断恢复、循环节拍这四点,任一处理不当都会导致行为意外。标准库sleep_for 是首选,但得配对用对 chrono 类型;平台特有函数只应在明确限定环境时使用,并做好条件编译。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

83

2023.09.25

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

476

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

57

2025.12.01

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

4161

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2914

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

174

2025.12.25

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

558

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1079

2023.07.27

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.7万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号