当前位置: 首页 > news >正文

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

休眠函数

  • 简介
  • 1: 让线程休眠一段时间
    • 1.1:std::chrono 的时钟 clock

简介

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

  • 在Windows系统中,sleep的参数是毫秒
  • sleep(2*1000); // sleep for 2 seconds
  • 在类Unix系统中,sleep()函数的单位是秒。

sleep(2); // sleep for 2 seconds

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

std::this_thread::sleep_for
std::this_thread::sleep_untill

1: 让线程休眠一段时间

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

函数原型:
template<class Rep, class Period>
void sleep_for(const std::chrono::duration<Rep,Period>& sleep_duration);
比如:想要一个线程休眠 100ms
std::this_thread::sleep_for(std::chrono::millseconds(100));

#include <iostream>
#include <chrono>
#include<thread>int main(){std::cout << "start wait......"<< std::endl;/**在C++11 中 chrono中有三种时钟:system_clock, steady_clock 和 high_resolution_clocksystem_clock : 是不稳定的,因为时钟是可调的。它可以输出当前时间距离:1970年1月1日00:00的毫秒数它一般用于需要得到 :绝对时点的场景。steady_clock:一般用在需要得到时间间隔的场景。high_resolution_clock:介于上面两者之间,时间精度比steady_clock()更精确*/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"<< std::endl;}
打印结果 
tart wait......
waited: 2000.06 ms

1.1:std::chrono 的时钟 clock

std::chrono是C++11引入的日期时间处理库,其中包含了3种时钟: system_clock,steady_clock ,high_resolution_clock 。如果需要使用高精度的时间,很自然就会想到使用 high_resolution_clock 。

1. system_clock: 用在需要得到绝对时间点的场景。

void test_system_clock(){auto curTime = std::chrono::system_clock::now();std::time_t tt = std::chrono::system_clock::to_time_t(curTime);std::cout<< tt << " seconds from 1970-01-01 00:00:00 UTC"<< std::endl;
}
int main(){test_system_clock();
}// 打印结果:1677597162 seconds from 1970-01-01 00:00:00 UTC
  1. steady_clock: 用在需要得到时间间隔,并且这个时间间隔不会因为修改系统时间而受到影响的场景
void test_steady_clock(){auto curTime = std::chrono::steady_clock::now();// do somethingstd::this_thread::sleep_for(std::chrono::milliseconds(3000));auto curTime2 = std::chrono::steady_clock::now();std::chrono::duration<double,std::milli> spendTime = (curTime2-curTime);std::cout<< "耗时:"<< spendTime.count()<< "秒"<< std::endl;
}int main(){test_steady_clock();
}// 打印:耗时:3000.07秒

相关文章:

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

休眠函数简介1: 让线程休眠一段时间1.1&#xff1a;std::chrono 的时钟 clock简介 C11 之前并未提供专门的休眠函数&#xff0c;C语言的 sleep、usleep函数其实是系统提供的函数&#xff0c;不同的系统函数的功能还要些差异。 在Windows系统中&#xff0c;sleep的参数是毫秒 …...

TryHackMe-The Great Escape(Docker)

The Great Escape 我们的开发人员创建了一个很棒的新网站。你能冲出沙盒吗&#xff1f; 端口扫描 循例 nmap Web信息收集 robots.txt: /exif-util是文件上传点&#xff0c;但是绕过之后貌似没啥用 在robots.txt当中披露了可能存在.bak.txt&#xff0c;现在我们已知的文件就是…...

这么强才给我28k,我头都不回,转身拿下40k~

时间真的过得很快&#xff0c;眨眼就从校园刚出来的帅气小伙变成了油腻大叔&#xff0c;给各位刚入道的测试朋友一点小建议&#xff0c;希望你们直通罗马吧&#xff01; 如何选择自己合适的方向 关于选择测试管理&#xff1a; 第一&#xff0c;你一定不会是一个喜欢技术&…...

【Python学习笔记】第二十一节 Python Lambda 函数

Python 提供了非常多的库和内置函数。有不同的方法可以执行相同的任务&#xff0c;而在 Python 中&#xff0c;有个万能之王函数&#xff1a;lambda 函数&#xff0c;它以不同的方式在任何地方使用。一、Lambda 函数简介在 Python 中&#xff0c;函数可以接受一个或多个位置参数…...

Nginx学习整理

Nginx学习第一章 Nginx概述1.1、Nginx概述1.2、Nginx官网1.3、Nginx用处第二章 Nginx单实例安装2.1、环境说明2.2、安装依赖2.3、Nginx下载2.4、Nginx解压2.5、Nginx安装2.6、Nginx命令2.7、开放防火墙2.8、启动后效果第三章 Nginx正向代理、反向代理3.1、概述3.2、反向代理配置…...

阿里面试之Hr面,这个套路把我坑惨了......

作为技术类的测试工程师面试&#xff0c;往往要经过多次面试才能拿到心仪的offer&#xff0c;这里面有技术一面、二面…&#xff0c;甚至总监面等&#xff0c;还有一个必不可少的就是HR面&#xff0c;一般HR会出现在你面试的最前面和最后面&#xff0c;前面是了解你的基本情况&…...

域基础和基本环境搭建

1.1 名词解释 域和工作组的区别&#xff1a; 工作组中所有的计算机都是对等的&#xff0c;也就是没有服务器和客户机的之分&#xff0c;所以工作组并不存在真正的集中管理作用&#xff1b;域是一个有安全边界的计算机集合&#xff0c;安全边界指的是一个域中的用户无法访问到另…...

Java Map集合体系(HashMap、LinkedHashMap、TreeMap、集合嵌套)

目录Map集合体系一、Map集合的概述二、Map集合体系特点三、Map集合常用API四、Map集合的遍历4.1 Map集合的遍历方式一&#xff1a;键找值4.2 Map集合的遍历方式二&#xff1a;键值对4.3 Map集合的遍历方式三&#xff1a;lambda表达式五、Map集合案例-统计投票人数六、Map集合的…...

使用邮箱验证实现登录功能(发送邮件,redis)

目录 概述 前端搭建 后端搭建 生成验证码-存入redis&#xff08;主要过程代码&#xff09; 发送邮件&#xff08;主要过程代码&#xff09; 登录验证-取出redis中数据进行验证&#xff08;主要代码&#xff09; 完整代码一-LoginController 完整代码二-LoginService 完…...

【Linux】网卡的7种bond模式

网卡的7种bond模式 一、bond模式 Mode0(balance-rr) 表示负载分担round-robin&#xff0c;和交换机的聚合强制不协商的方式配合 Mode1(active-backup) 表示主备模式&#xff0c;只有一块网卡是active,另外一块是备的standby&#xff0c;这时如果交换机配的是捆绑&#xff0c…...

AQS抽象队列同步器

aqs 抽象队列同步器&#xff0c;内部存储了一个valitail修饰的status 和内部类node &#xff0c;来实现对共享变量并发同步队列机制,以reentrantLock为例&#xff0c;lock底层实际上调用的是sync的lock&#xff0c;会调用cas对status的状态进行修改&#xff0c;来确定是否获得锁…...

springBoot对REST支持源码解析

一、在配置类中&#xff1a; AutoConfiguration(after { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.class }) ConditionalOnWebApplication(type Type.SERVLET) ConditionalOnClass({ Servlet.class, D…...

6 集成学习及Python实现

1 主要思想 集成学习: 三个臭裨将, 顶个诸葛亮 Bagging: 数据随机重抽样, 并行构建分类器, 投票&#xff1b;Boosting: 关注被错分的样本, 串行构建分类器, 加权投票。 2 理论 AdaBoost (Adaptive Boosting)示意图1 错误率: εEN\varepsilon \frac{E}{N}εNE​ 其中NNN为…...

如何编程实现从多数据库操作数据

对于数据量很大的复杂系统&#xff0c;有时候会采用分库或者分表的减轻单台数据库服务器压力&#xff0c;截止目前有一些工具直接支持读写分离等&#xff0c;例如ShardingSphere&#xff0c;如果不采用工具框架&#xff0c;从编码出发&#xff0c;如何实现从多个数据库读写数据…...

LeetCode 147. 对链表进行插入排序 | C/C++版

LeetCode 147. 对链表进行插入排序 | C语言版LeetCode 147. 对链表进行插入排序题目描述解题思路思路一&#xff1a;使用栈代码实现运行结果参考文章&#xff1a;思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a;[]()LeetCode 147. 对链表进行插入排序 …...

【QT进阶】第五章 QT绘图之自定义控件--仪表盘绘制

❤️作者主页:凉开水白菜 ❤️作者简介:共同学习,互相监督,热于分享,多加讨论,一起进步! ❤️专栏目录:【零基础学QT】文章导航篇 ❤️专栏资料:https://pan.baidu.com/s/192A28BTIYFHmixRcQwmaHw 提取码:qtqt ❤️点赞 👍 收藏 ⭐再看,养成习惯 订阅的粉丝可通过…...

Java代码弱点与修复之——URL manipulation(URL操纵)

弱点描述 “URL manipulation” 是指攻击者利用应用程序中的 URL 参数来执行恶意操作的一种攻击技术。 在 URL manipulation 攻击中,攻击者会修改应用程序中的 URL 参数,以便执行不当操作,如访问未授权的页面、修改他人的数据、绕过访问控制等。攻击者通常会使用手动修改 …...

Sharding Sphere学习

一、基本概念 1.什么是Sharding Sphere 2.分库分表3.分库分表的方式 4.分库分表应用和问题 5.功能 5.1数据分片 —核心概念 —使用限制 5.2分布式事务 —核心概念 —使用限制 5.3读写分离 —核心概念 —使用限制 5.4高可用 —核心概念 —使用限制 5.5数据库网关 —核心概念…...

粗心小编被云拯救,那云上数据谁来拯救?

开工第三天      小编已忙的焦头烂额      不是因为工作积压      而是因为自己的疏忽      也许是没有进入工作状态,一大早先经历了自行车钥匙丢失,手机遗落在家,好不容易坐到工位上才发现,备份数据的U盘忘带了。    不过,好在提前将工作文件上传到了云端…...

[git可视化软件]gitkraken平替:GitAhead

日期2023-02-28 gitkraken6.5.1已经不能登陆使用了!! 6.5.1免费版已经无法使用!!! 现在是2023-02-28 这款工具已经废除了6.5.1版本的使用功能了,我直接卡在登陆界面进不去项目了. 要想继续管理私有项目,只能升级最新版的软件,并且开通会员.会员费用高的一批,一年要59.4美元.约…...

SpringBoot+Vue员工绩效系统实战:从数据库设计到权限控制的完整避坑指南

SpringBootVue员工绩效系统实战&#xff1a;从数据库设计到权限控制的完整避坑指南 在数字化转型浪潮下&#xff0c;企业绩效管理系统正从传统的Excel表格升级为智能化平台。本文将带您从零构建一个具备多维度考核、动态权限控制和可视化分析的绩效系统&#xff0c;重点解决实际…...

5V与3.3V MCU串口电平转换电路设计

不同工作电压MCU间的串口电平转换电路设计1. 项目概述1.1 问题背景在现代嵌入式系统设计中&#xff0c;经常遇到不同工作电压的微控制器(MCU)之间需要进行串口通信的场景。例如&#xff1a;MCU1工作电压&#xff1a;5VMCU2工作电压&#xff1a;3.3V若直接将两个MCU的TX、RX引脚…...

Mermaid在线编辑器:技术图表制作的高效解决方案

Mermaid在线编辑器&#xff1a;技术图表制作的高效解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...

当多线雷达遇上RTK:一个能跑工业现场的SLAM方案

多传感器融合建图及定位的工程化落地方案&#xff0c;多线雷达rtk&#xff1b;室内室外导航都适用。 包含部署文档和代码注释&#xff1b;包含工程落地角度的优化。 不含运动控制。 室外场景用RTK信号稳如老狗&#xff0c;一进厂房立马抓瞎&#xff1b;多线雷达在室内横扫千军…...

目标检测新手必看:如何用Python手写IOU计算函数(附完整代码)

目标检测实战&#xff1a;从零编写Python版IOU计算函数 刚接触目标检测时&#xff0c;最让人困惑的莫过于那些神秘的评估指标。其中IOU&#xff08;交并比&#xff09;就像一把尺子&#xff0c;能量化算法预测框与真实框的贴合程度。但纸上得来终觉浅&#xff0c;今天我们就用P…...

Wireshark抓包实战:DHCP协议交互全流程解析(附常见问题排查)

Wireshark深度解析&#xff1a;DHCP协议交互全流程与实战排错指南 从零开始理解DHCP协议的本质 想象一下&#xff0c;当你带着笔记本电脑走进一家咖啡馆&#xff0c;连接Wi-Fi的瞬间&#xff0c;设备就自动获得了上网所需的所有配置——IP地址、子网掩码、默认网关、DNS服务器。…...

智慧生鲜配送:揭秘生鲜配送商城APP功能版块设计

在数字化消费浪潮中&#xff0c;生鲜配送商城APP成为居民采购食材的重要渠道。其功能版块设计聚焦用户需求&#xff0c;通过智能化、便捷化的操作体验&#xff0c;打造高效生鲜购物场景。以下揭秘其核心功能玩法&#xff0c;解析如何实现“从指尖到餐桌”的流畅服务。一、首页&…...

如何安全提取Chrome浏览器密码:3种实用方法完全指南

如何安全提取Chrome浏览器密码&#xff1a;3种实用方法完全指南 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 在数字生活中&#xff0c;你是否遇到过忘记网站密码的困扰&…...

5分钟搞定PaddleOCR文字识别:Python版保姆级教程(附完整代码)

5分钟极速上手PaddleOCR&#xff1a;Python实战指南与避坑手册 第一次接触OCR技术时&#xff0c;我被那些复杂的配置参数和晦涩的文档吓退了三次。直到发现PaddleOCR这个"开箱即用"的工具&#xff0c;才明白原来文字识别可以如此简单。本文将带你用最直接的方式&…...

Python异常处理最佳实践:从原理到实践

Python异常处理最佳实践&#xff1a;从原理到实践 1. 背景与动机 在Python编程中&#xff0c;异常处理是一个重要的编程实践。良好的异常处理可以使程序更加健壮&#xff0c;提高代码的可维护性和可读性。然而&#xff0c;许多开发者在处理异常时存在一些常见的问题&#xff0c…...