讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ 怎么让线程休眠 C++ this_thread::sleep_for使用教程【多线程】

陌芳君_4466

陌芳君_4466

发布时间:2026-01-27 14:45:10

|

258人浏览过

|

来源于php中文网

原创

最稳妥的休眠方式是std::this_thread::sleep_for,它接受std::chrono时长、不依赖系统时钟偏移、类型安全且跨平台;避免使用已弃用的C风格sleep/usleep,因其非标准、精度模糊且Windows不支持usleep。

c++ 怎么让线程休眠 c++ this_thread::sleep_for使用教程【多线程】

直接说结论:用 std::this_thread::sleep_for 最稳妥,它接受一个 std::chrono 时长,不依赖系统时钟偏移,比 sleep_until 更常用、更直观。

为什么不用 sleep 或 usleep?

这些是 C 风格的 POSIX 函数(sleep 秒级、usleep 微秒级),在 C++11 后已不推荐:它们不是标准 C++,跨平台性差(Windows 不支持 usleep),且精度和语义模糊。C++ 标准库提供了类型安全、可读性强的替代方案。

常见错误现象:usleep(1000) 看似休眠 1 毫秒,实际是 1000 微秒 → 容易误算;在 Windows 编译直接报错 unresolved external symbol usleep。

  • 必须包含头文件:#include <thread></thread> 和 #include <chrono></chrono>
  • 不需要链接额外库(如 pthread),std::this_thread::sleep_for 是标准库内置实现
  • 休眠期间线程让出 CPU,但不释放持有的互斥锁(这点和 std::condition_variable::wait 有本质区别)

sleep_for 的典型用法和参数陷阱

它接收一个 std::chrono::duration 类型,比如 std::chrono::milliseconds(500)。关键点在于:不能传裸数字,也不能混用不同精度的 duration(比如把 seconds 直接赋给 milliseconds 变量,会编译失败)。

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

windows-screenshot-ocr
windows-screenshot-ocr

Windows全屏截图(自动标记鼠标位置)+ 原生OCR文字识别。本地运行,无需联网和API Key,适用于截图分析和自动化OCR场景。

下载

正确示例:

#include <thread>
#include <chrono>
<p>std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::this_thread::sleep_for(2s); // C++14 起支持字面量运算符,需 #include <chrono>
std::this_thread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(1.5s));
  • 避免写 sleep_for(100) —— 编译不过,缺少 duration 类型信息
  • 100ms 和 std::chrono::milliseconds(100) 等价,但前者需 C++14+ 且开启 std::literals::chrono_literals(通常默认可用)
  • 如果计算动态时长,优先用 duration_cast 显式转换,避免隐式截断(例如把 microseconds 转 milliseconds 时丢精度)

休眠被中断怎么办?sleep_for 会抛异常吗?

不会。std::this_thread::sleep_for 是“尽力休眠”,不响应中断请求(如 std::thread::interrupt() 已被弃用),也不抛异常。即使系统时间被大幅调整(如 NTP 同步跳变),它仍按相对时长等待,行为稳定。

但它可能因系统调度延迟而略长于指定时间(这是所有用户态休眠的共性,非 bug)。如果你需要「绝对截止时间」或「可取消等待」,应改用 std::condition_variable::wait_until 配合 predicate 和 mutex。

  • 不要指望 sleep_for 做超时等待 I/O 或锁 —— 它不具备唤醒机制
  • 调试时发现休眠远超预期?先检查是否卡在了前序的 mutex.lock() 或死锁,而非 sleep_for 本身
  • 高精度定时场景(如音频同步)慎用,它不保证 sub-millisecond 级别准时性

真正容易被忽略的是:休眠时长的单位语义必须和业务逻辑对齐。比如网络重试退避策略里写 sleep_for(2 * base_delay),如果 base_delay 是 std::chrono::seconds,但乘法结果被误存为 int,就彻底丢失了 duration 类型安全 —— 这类问题编译期无法捕获,运行时才表现异常。

热门AI工具

更多
豆包大模型

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

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

DeepSeek

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

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

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

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7079

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3385

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4428

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

3005

2025.08.29

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

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

4618

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1289

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

443

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

579

2026.01.21

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习

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

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