C++笔记之各种sleep方法总结

C++笔记之sleep总结

—— 2023年4月9日 小问 上海


code review

文章目录

  • C++笔记之sleep总结
    • 1.std::this\_thread::sleep\_for()
      • 附:std::this\_thread::sleep\_for(std::chrono::duration)
    • 2.std::this\_thread::sleep\_until()
      • 附:std::this\_thread::sleep\_until(std::chrono::time\_point)
    • 3.std::chrono::steady\_clock::now()
    • 4.1.usleep()
    • 4.2.sleep()
    • 5.ros中的ros::Duration::sleep()
    • 6.Windows API——Sleep()函数
    • 7.C++中的wait\_for函数
      • 7.1.std::condition\_variable::wait\_for()
      • 7.2.std::future::wait\_for() 或 std::shared\_future::wait\_for()
    • 8.boost::this\_thread::sleep(boost::posix\_time::milliseconds(200));
    • 9.boost::posix\_time

1.std::this_thread::sleep_for()

该函数属于 C++11 标准,需要包含头文件 <thread>,使用时需要指定休眠的时间长度。
在这里插入图片描述

代码

#include <iostream>
#include <chrono>   // std::chrono::seconds
#include <thread>   // std::this_thread::sleep_forint main() {std::cout << "Start sleeping..." << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));std::cout << "Wake up!" << std::endl;return 0;
}

附:std::this_thread::sleep_for(std::chrono::duration)

在这里插入图片描述

代码

#include <chrono>
#include <thread>std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 暂停 100 毫秒

2.std::this_thread::sleep_until()

该函数属于 C++11 标准,需要包含头文件 <thread>,使用时需要指定休眠的时间点。
在这里插入图片描述

代码

#include <iostream>
#include <chrono>   // std::chrono::system_clock, std::chrono::seconds
#include <thread>   // std::this_thread::sleep_untilint main() {std::cout << "Start sleeping..." << std::endl;auto wake_up_time = std::chrono::system_clock::now() + std::chrono::seconds(1);std::this_thread::sleep_until(wake_up_time);std::cout << "Wake up!" << std::endl;return 0;
}

附:std::this_thread::sleep_until(std::chrono::time_point)

**该函数属于 C++11 标准,需要包含头文件 <thread>,暂停当前线程直到指定时间点。
在这里插入图片描述

代码

#include <chrono>
#include <thread>auto now = std::chrono::system_clock::now();
auto end = now + std::chrono::seconds(10);
std::this_thread::sleep_until(end); // 暂停 10 秒钟

3.std::chrono::steady_clock::now()

该函数属于 C++11 标准,需要包含头文件 <thread>,获取当前时间点(不受系统时间变化的影响)
在这里插入图片描述

代码

#include <chrono>auto start = std::chrono::steady_clock::now();
// 一些操作
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> elapsed = end - start;

4.1.usleep()

usleep():该函数属于 POSIX 标准,需要包含头文件 <unistd.h>,使用时需要指定休眠的时间长度,单位为微秒。但是该函数已被弃用,建议使用 std::this_thread::sleep_for() 替代。
在这里插入图片描述

代码

#include <iostream>
#include <unistd.h>   // usleepint main() {std::cout << "Start sleeping..." << std::endl;usleep(1000000);   // 休眠 1 秒std::cout << "Wake up!" << std::endl;return 0;
}

4.2.sleep()

unistd.h> 头文件中的 sleep 函数用于使程序在指定的秒数内休眠,即让程序暂停执行,直到指定的时间过去为止。

使用 sleep 函数需要包含 <unistd.h> 头文件,并在代码中调用函数 sleep(unsigned int seconds)。其中,seconds 参数表示要让程序休眠的秒数。
需要注意的是,使用 sleep 函数会阻塞当前线程,因此如果需要同时进行其他操作,可以考虑使用 std::thread 进行多线程编程。
在这里插入图片描述

代码

#include <unistd.h>int main() {// 程序暂停 5 秒钟sleep(5);return 0;
}

5.ros中的ros::Duration::sleep()

需要注意的是,1-4方法都是用于暂停当前线程的执行。如果需要暂停整个程序的执行,建议使用 ROS 中的 ros::Duration::sleep() 方法,因为它会在暂停期间继续处理 ROS 的消息循环。

在ROS中,建议使用 ros::Rate 类来控制循环的执行频率,而不是使用 sleep 函数来暂停程序。ros::Rate 类可以保证程序在一定频率内运行,并且自动计算和控制休眠时间,从而达到精确控制循环频率的目的。

在ROS中,ros::Duration::sleep()是一个用于暂停程序执行一段时间的函数。它接受一个 ros::Duration 对象,表示程序要暂停的时间长度。

以下是一个例子,程序会在发布两条消息之间暂停 1 秒钟:
在这里插入图片描述

在这个例子中,我们使用了 ros::Duration(1.0) 来创建一个 1 秒钟的 ros::Duration 对象,并传递给 sleep() 方法,使得程序暂停了 1 秒钟。
代码

#include "ros/ros.h"
#include "std_msgs/String.h"int main(int argc, char **argv) {ros::init(argc, argv, "example_node");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<std_msgs::String>("example_topic", 10);while (ros::ok()) {std_msgs::String msg;msg.data = "Hello, world!";pub.publish(msg);ros::Duration(1.0).sleep(); // 暂停 1 秒钟msg.data = "Goodbye, world!";pub.publish(msg);ros::Duration(1.0).sleep(); // 暂停 1 秒钟}return 0;
}

6.Windows API——Sleep()函数

在这里插入图片描述

7.C++中的wait_for函数

7.1.std::condition_variable::wait_for()

在这里插入图片描述

7.2.std::future::wait_for() 或 std::shared_future::wait_for()

在这里插入图片描述

以上两种wait_for方法都可以在一定时间内等待一些操作或条件。然而,它们的应用场景和使用方法是不同的。

8.boost::this_thread::sleep(boost::posix_time::milliseconds(200));

在这里插入图片描述

9.boost::posix_time

boost::posix_time 是 Boost.Date_Time 库的一部分,提供了一套用于表示时间和日期的类型和函数。这些类型和函数是基于 POSIX 时间规范的,所以被称为 “POSIX 时间”。

Boost.Date_Time 库提供了一组完整的、与平台无关的日期和时间处理功能,使得 C++ 开发者能够在不同的平台上处理日期和时间。

以下是 boost::posix_time 中一些常用的类型和函数:

  1. ptime: 代表一个时间点。它由一个日期和一个时间间隔组成。

    boost::posix_time::ptime t1(boost::posix_time::second_clock::local_time());
    
  2. time_duration: 代表一个时间间隔。

    boost::posix_time::time_duration td(1, 10, 30);  // 1小时,10分钟,30秒
    
  3. time_period: 代表一个时间段,由两个时间点组成。

    boost::posix_time::ptime t2 = t1 + boost::posix_time::hours(1);
    boost::posix_time::time_period tp(t1, t2);
    
  4. second_clockmicrosec_clock: 提供了获取当前系统时间的方法。

    boost::posix_time::ptime t3 = boost::posix_time::second_clock::local_time();   // 精确到秒
    boost::posix_time::ptime t4 = boost::posix_time::microsec_clock::local_time(); // 精确到微秒
    

以上只是一些基本的类型和函数。boost::posix_time 库还提供了一系列的函数来进行日期和时间的运算,如加法、减法、比较等。同时,它还支持从字符串解析时间,以及将时间格式化为字符串。

需要注意的是,从 C++11 开始,C++ 标准库也开始提供了一套完整的日期和时间处理功能,即 <chrono> 库。如果你的编译器支持 C++11 或更高版本的 C++,你也可以考虑使用 <chrono> 库来处理日期和时间,而不是使用 boost::posix_time

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2789.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft Edge插件推荐:CSDN·浏览器助手

文章目录 1.简介2.安装3.总结 今天来给大家分享一个超级好用的Microsoft Edge插件&#xff0c;名为CSDN浏览器助手 1.简介 CSDN浏览器助手是一款集成本地书签、历史记录与 CSDN搜索(so.csdn.net) 的搜索工具&#xff0c;可以自定义Microsoft Edge的新标签页&#xff0c;还可以…

UDP SocketAPI

1、TCP与UDP区别 TCP&#xff1a;有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 2、UDP sockeAPI的核心类 DatagramSocket&#xff1a;相当于对socket文件进…

OpenStack(3)--vxlan网络实战

目录 一、ML2配置文件 二、上传cirros镜像 三、创建vxlan10网络 四、创建实例/同vxlan通信测试 五、不同vxlan通信测试 5.1 新建vxlan11 5.2 新建路由/添加路由接口 5.3 不同vxlan通信测试 5.4 qemu-vnc报错 六、深度剖析vxlan 七、认识 Bridge br-ex、Bridge br-in…

基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别(附源码)

一、前言 此示例首先展示了如何使用基于预训练的膨胀 3-D &#xff08;I3D&#xff09; 双流卷积神经网络的视频分类器执行活动识别&#xff0c;然后展示了如何使用迁移学习来训练此类视频分类器使用 RGB 和来自视频的光流数据 [1]。 基于视觉的活动识别涉及使用一组视频帧预…

PHY芯片的使用(一)之基本概念讲解(MII相关)2

今天想和大家交流一下MAC和PHY之间的接口MII。 MII(Media Independent Interface )是介质无关接口。MII接口定义了在MAC层和物理层之间传送数据和控制状态等信息的接口&#xff0c;它是10M和100M兼容的接口&#xff0c;经过扩展后还可以用于1000M的MAC层与物理层的接口&#x…

【国产复旦微FMQL45教程】-小试牛刀之LED

本教程采用 FMQL7045 FPGA开发板来完成整个试验&#xff0c;板卡照片如下&#xff1a; 具有丰富的接口资源&#xff0c;系统框图如下&#xff1a; 本教程用于完成基于Vivado的FMQL45的LED实验&#xff0c;目标是能够将这款开发板PL端先跑起来。 对于纯 PL 设计&#xff0c;我们…

计算机网络—局域网

文章目录 ARP协议以太网以太网帧结构交换机交换机的端口划分 PPP协议 MAC地址 封装在链路帧中的地址&#xff0c;作为每一个接口的地址。&#xff08;一般是48bit大小&#xff09; MAC地址是刻画到我们物理接口上的&#xff0c;我们的网卡一旦出厂之后就会携带一个唯一的物理地…

SAP 后台配置之FM基金管理篇

SAP FM基金管理后台配置及应用 1 二话不说先上后台配置&#xff0c;能跑通为先1.1 基础设置1.1.1 维护财务管理区1.1.2 分配财务管理区1.1.3 激活全局基金管理功能1.1.4 定义全局参数1.1.5 定义编号区间编号并分配1.1.6 创建更改层次变式1.1.3 激活科目分配元素1.1.4 设置允许空…

微信小程序 rich-text富文本框 怎么设置里面节点的样式

1、在JS中我们获取数据&#xff0c;在没有类名的情况下 使用正则匹配你想要添加演示的节点 res[1].data[0].f_content为rich-text里面的节点 如图 代码&#xff1a;让获取的节点中的图片的最大宽度为100%,高度为auto this.content res[1].data[0].f_content.replace(/\<…

Java泛型详解:为什么使用泛型?如何使用泛型?

Java泛型详解&#xff1a;为什么使用泛型&#xff1f;如何使用泛型&#xff1f; &#x1f498;一、为什么使用泛型&#xff1f;&#x1f498;二、如何使用泛型&#xff1f;&#x1f496;1. 泛型类的使用&#xff1a;&#x1f496;2. 泛型方法的使用&#xff1a;&#x1f496;3.…

Python高级教程:简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 FastAPI是一个高性能、易于使用、快速编写API的…

java实现布隆过滤器(手写和Guava库提供的)

目录 前言 布隆过滤器的原理 插入​编辑 查询 删除 布隆过滤器优缺点 优点&#xff1a; 缺点&#xff1a; 代码实现 方式一&#xff1a; Google Guava 提供的 BloomFilter 类来实现布隆过滤器 到底经过几次哈希计算 解决缓存穿透 方式二&#xff1a;手写 前言 在学…