讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

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

老墨小哥_6775

老墨小哥_6775

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

|

1037人浏览过

|

来源于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(),依赖 <thread></thread> 和 <chrono></chrono> 头文件,可移植、类型安全。

常见错误是传错时间单位:必须用 std::chrono 的持续时间类型(如 std::chrono::seconds、std::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()(来自 <windows.h></windows.h>?错,它实际在 <dos.h></dos.h>,已废弃且仅旧 MS-DOS 兼容环境支持)和真正可用的 Sleep()(注意首字母大写,参数单位是毫秒,需包含 <windows.h></windows.h>)。

典型陷阱:

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

Todo List for MacOS
Todo List for MacOS

仅限macOS - 通过AppleScript管理macOS提醒事项应用。支持全功能提醒管理:添加、列出、完成、删除、搜索、创建列表等。

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

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

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

关键点:

  • 参数是 struct timespec,不是毫秒整数
  • 必须检查返回值:若返回 -1 且 errno == EINTR,说明被信号打断,需手动重试
  • 别漏掉 #include <time.h></time.h> 和 #include <errno.h></errno.h>
/* Linux/macOS 推荐(非 C++ 标准,但比 usleep 稳定) */
#include <time.h>
#include <errno.h>
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 类型;平台特有函数只应在明确限定环境时使用,并做好条件编译。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
while的用法
while的用法

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

354

2023.09.25

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

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

4858

2023.08.10

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

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

603

2025.12.01

undefined是什么
undefined是什么

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

12385

2023.07.31

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

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

5547

2024.08.14

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

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

2516

2025.12.25

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

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

3479

2023.07.26

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

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

3038

2023.07.27

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn