news 2026/5/17 4:39:22

详解C++11 线程休眠函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详解C++11 线程休眠函数

C++ 11之前并未提供专门的休眠函数。c语言的sleep、usleep其实都是系统提供的函数,不同的系统函数的功能还有些差异。

在Windows系统中,sleep的参数是毫秒。

1

sleep(2*1000);//sleep for 2 seconds

在类Unix系统中,sleep()函数的单位是秒。

1

sleep(2);//sleep for 2 seconds

从C++11开始,中C++标准库提供了专门的线程休眠函数,使得你的代码可以独立于不同的平台。

1

2

3

std::this_thread::sleep_for

std::this_thread::sleep_untill

1. 让线程休眠一段时间

std::this_thread::sleep_for用于Block当前线程一段时间。

1

2

template<classRep,classPeriod >

voidsleep_for(conststd::chrono::duration<Rep, Period>& sleep_duration );

sleep的时间间隔从纳秒到小时都有具体的定义。

1

2

3

4

5

6

std::chrono::nanoseconds

std::chrono::microseconds

std::chrono::milliseconds

std::chrono::seconds

std::chrono::minutes

std::chrono::hours

比如我们想要一个线程休眠100ms。

1

std::this_thread::sleep_for(std::chrono::milliseconds(100));

我们想要一个线程休眠1分钟:

1

std::this_thread::sleep_for(std::chrono::minutes(1));

完整的代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <iostream>

#include <chrono>

#include <thread>

intmain() {

std::cout <<"Hello waiter\n"<< std::flush;

auto start = std::chrono::high_resolution_clock::now();

std::this_thread::sleep_for(std::chrono::milliseconds(2000));

auto end = std::chrono::high_resolution_clock::now();

std::chrono::duration<double, std::milli> elapsed = end-start;

std::cout <<"Waited "<< elapsed.count() <<" ms\n";

}

输出:

Hello waiter
Waited 2000.12 ms

2. 休眠直至到一个时间点

1

2

template<classClock,classDuration >

voidsleep_until(conststd::chrono::time_point<Clock,Duration>& sleep_time )

sleep_until会阻塞当前线程直至未来某个时间点到达。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#include <iostream>

#include <thread>

#include <chrono>

// Print Current Time

voidprint_time_point(std::chrono::system_clock::time_point timePoint) {

std::time_ttimeStamp = std::chrono::system_clock::to_time_t(timePoint);

std::cout << std::ctime(&timeStamp) << std::endl;

}

voidthreadFunc() {

std::cout<<"Current Time :: ";

// Print Current Time

print_time_point(std::chrono::system_clock::now());

// create a time point pointing to 10 second in future

std::chrono::system_clock::time_point timePoint =

std::chrono::system_clock::now() + std::chrono::seconds(10);

std::cout <<"Going to Sleep Until :: "; print_time_point(timePoint);

// Sleep Till specified time point

// Accepts std::chrono::system_clock::time_point as argument

std::this_thread::sleep_until(timePoint);

std::cout<<"Current Time :: ";

// Print Current Time

print_time_point(std::chrono::system_clock::now());

}

intmain() {

std::threadth(&threadFunc);

th.join();

return0;

}

程序输出:

Current Time :: Sun Oct 11 02:57:38 2020

Going to Sleep Until :: Sun Oct 11 02:57:48 2020

Current Time :: Sun Oct 11 02:57:48 2020

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/17 4:39:19

基于RAG的个人数据智能助手:从原理到实践

1. 项目概述&#xff1a;从“矿场”到“上下文”的智能跃迁最近在梳理一些开源项目时&#xff0c;发现火山引擎开源了一个名为MineContext的项目。初看这个名字&#xff0c;可能会让人联想到“矿场”或“挖矿”&#xff0c;但实际上&#xff0c;这里的“Mine”并非指加密货币挖…

作者头像 李华
网站建设 2026/5/17 4:39:06

深度解析Cursor:AI编程助手核心架构与工程实践指南

1. 项目概述&#xff1a;解剖Cursor&#xff0c;理解AI编程助手的核心构造最近在GitHub上看到一个名为agent-anatomy/cursor的项目&#xff0c;这个标题立刻引起了我的兴趣。作为一名长期与各类开发工具打交道的程序员&#xff0c;我深知Cursor这款AI驱动的代码编辑器在开发者社…

作者头像 李华
网站建设 2026/5/17 4:38:54

Airi开源AI平台:基于Next.js与FastAPI的一体化对话与图像生成部署指南

1. 项目概述&#xff1a;一个开箱即用的AI对话与图像生成平台最近在折腾本地AI部署的朋友&#xff0c;可能都绕不开一个痛点&#xff1a;模型管理繁琐、WebUI配置复杂、不同功能需要切换不同工具。如果你也受困于此&#xff0c;那么今天聊的这个项目moeru-ai/airi&#xff0c;或…

作者头像 李华
网站建设 2026/5/17 4:38:47

AI驱动的交互式编程环境:ai_repls项目实战与安全指南

1. 项目概述&#xff1a;当AI成为你的“代码替身”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫jogardi/ai_repls。光看名字&#xff0c;你可能觉得这又是一个把大语言模型&#xff08;LLM&#xff09;塞进命令行终端的玩具。但实际用下来&#xff0c;我发现它的定位远…

作者头像 李华
网站建设 2026/5/17 4:38:44

基于RAG与LLM构建代码库智能问答系统:从原理到实践

1. 项目概述&#xff1a;当代码库遇上“智能副驾”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫openai-cs-agents-demo。光看这个名字&#xff0c;你可能会觉得这又是一个关于AI智能体的常规演示。但如果你像我一样&#xff0c;经常需要和庞大的代码库打交道&#xff0…

作者头像 李华
网站建设 2026/5/17 4:38:32

稀疏最小二乘问题的混合精度求解与优化

1. 稀疏最小二乘问题的混合精度求解框架在科学计算和工程应用中&#xff0c;稀疏最小二乘问题广泛存在于数据拟合、信号处理和机器学习等领域。这类问题的标准形式可以表示为&#xff1a;minₓ ||b - Ax||₂其中A∈ℝᵐˣⁿ&#xff08;m>n&#xff09;是大型稀疏矩阵&#…

作者头像 李华