当前位置: 首页 > 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秒
http://www.lryc.cn/news/23925.html

相关文章:

  • TryHackMe-The Great Escape(Docker)
  • 这么强才给我28k,我头都不回,转身拿下40k~
  • 【Python学习笔记】第二十一节 Python Lambda 函数
  • Nginx学习整理
  • 阿里面试之Hr面,这个套路把我坑惨了......
  • 域基础和基本环境搭建
  • Java Map集合体系(HashMap、LinkedHashMap、TreeMap、集合嵌套)
  • 使用邮箱验证实现登录功能(发送邮件,redis)
  • 【Linux】网卡的7种bond模式
  • AQS抽象队列同步器
  • springBoot对REST支持源码解析
  • 6 集成学习及Python实现
  • 如何编程实现从多数据库操作数据
  • LeetCode 147. 对链表进行插入排序 | C/C++版
  • 【QT进阶】第五章 QT绘图之自定义控件--仪表盘绘制
  • Java代码弱点与修复之——URL manipulation(URL操纵)
  • Sharding Sphere学习
  • 粗心小编被云拯救,那云上数据谁来拯救?
  • [git可视化软件]gitkraken平替:GitAhead
  • CentOS8基础篇8:使用systemctl管理NFS服务
  • Go defer用法
  • 产地证是什么,主要作用有哪些?
  • 王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记
  • 数据处理 |遍历所有文件夹及子目录文件夹方法总结与实例代码详解
  • ProtoEditor - 如何在Unity中实现一个Protobuf通信协议类编辑器
  • 2022 OpenCV Spatial AI大赛前三名项目分享,开源、上手即用,优化了OAK智能双目相机的深度效果。
  • Android 蓝牙开发——HCI log 分析(二十)
  • flask入门-4.项目实战
  • java 1(概要、变量与运算符)
  • ​力扣解法汇总2363. 合并相似的物品