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

news2024/10/6 10:40:27

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_for

int 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_until

int 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>   // usleep

int 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.coloradmin.cn/o/718242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c# 与单片机之间 float与byte的相互转化

该章作为 串口调试助手及结构体的收发的补充,主要用于自定义协议中的负数,浮点数等的收发(我们以前用的浮点数等,是直接使用的字符串的收发,从字符串中进行解析的,这里主要使用十六进制,对其收发原理及使用操作进行剖析)。 虚拟串口调试助手 一般来说,电脑的外部设备…

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

文章目录 01 单点登录的概念02 keycloak的中的相关概念2.1 概念之间的关系2.2 案例说明 03 如何使用keycloak实现单点登录3.1 步骤与效果说明3.2 环境说明 04 操作步骤4.1 在服务器上创建并启动keycloak服务4.2 创建一个领域4.3 创建一个客户端4.4 获取客户端适配器配置4.5 创建…

C. Logo Turtle (DP,思维)

传送门 题意&#xff1a; 给一个含有T、F的字符串&#xff0c;T表示转向&#xff0c;F表示前进1格。现在可以把其中的T改为F&#xff0c;或F改为T&#xff0c;改变n次&#xff08;可重复改变某一位置的字母&#xff09;&#xff0c;问相对于起点最远能走多远。 思路&#xff…

quilt data 安装 数据包 框架

安装 Quilt 有两个用户可见的组件&#xff1a; 一个 Python 客户端一个 Web 目录 Python 客户端 需要 Python 3.7 或更高版本。 $ pip install quilt3[pyarrow]Mental Model Quilt 数据包的思维模型 Quilt 将数据集表示为数据包。一个数据包是一个不可变的相关文件集合&a…

Redis的主从复制、哨兵、cluster集群

Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台Redis服务…

JAVA关于多线程的学习

1.创建线程的方法(这里不考虑继承Thread类) 通过实现Runnable接口的方式实现 public class MyRunnable implements Runnable{Overridepublic void run() {for (int i 0; i < 5; i) {System.out.println(Thread.currentThread().getName()"执行了....");}} }pub…

基于.Net Core微服务-第1章:说明及技术栈

微服务是一种架构模式&#xff0c;提倡将单一应用程序划分为一组小的服务&#xff0c;服务相互协调、互相配合&#xff0c;为用户提供最终价值。

vulnhub-ripper(易)

打靶练习Ripper&#xff0c;这是一个中低的靶场 0x00 部署0x01 信息收集&#xff1a;端口扫描、服务发现0x02路径扫描0x03 总结 0x00 部署 靶机&#xff1a;下载地址 宿主机&#xff1a;kali2021版本 0x01 信息收集&#xff1a;端口扫描、服务发现 sudo arp-scan -l #探测存…

【每日随笔】摩托车驾驶 ④ ( 德州增驾摩托车 D 本记录 | 考场位置 “ 德州市公安局交警支队直属四大队车辆管理所 “ )

文章目录 一、进入考场二、科目一三、科目二1、推车 ( 找准车辆停放位置 )2、上车前检查 ( 开始考试前准备 )3、科目二考试开始4、科目二路线要求5、坡起6、绕桩7、单边桥 四、科目三教学1、推车 ( 找准车辆停放位置 )2、上车前检查 ( 开始考试前准备 )3、科目三考试开始4、科目…

NSS [SWPUCTF 2021 新生赛]Do_you_know_http

NSS [SWPUCTF 2021 新生赛]Do_you_know_http 先看题目&#xff0c;应该是伪造XFF&#xff0c;UA等东西。 postman一把梭。

Bootloader Design of PIC18 series MCU

注意&#xff1a;下列描述是在PIC单片机上启用Bootloader的一个相关知识的近似完备集。所有需要了解的&#xff0c;bootloader与用户态程序交互的理论知识都已给出。 1.概述 嵌入式产品化后&#xff0c;需要考虑现场升级&#xff0c;单片机如果需要添加现场升级功能&#xff…

linux+win——嵌套虚拟机性能测试

参考博文&#xff1a;CSDN-Violent-Ayang&#xff08;作者&#xff09;-UNIX BENCH详细安装及使用步骤 unix bench wget http://175.6.32.4:88/soft/test/unixbench/unixbench-5.1.2.tar.gz tar -xzvf unixbench-5.1.2.tar.gz cd unixbench-5.1.2 vim Makefile # 将 Makefile 中…

虹科方案 | Redis Enterprise:适用于任何企业的矢量数据库解决方案

用户希望他们遇到的每个应用程序和网站都具有搜索功能。然而&#xff0c;超过80%的业务数据是非结构化的&#xff0c;以文本、图像、音频、视频或其他格式存储。因此&#xff0c;我们需要一种跨非结构化数据的搜索方式。 什么是矢量数据库&#xff08;vector database&#xff…

【自动化测试教程】 —— pytest 框架详解 ~

pytest框架 特点: 容易上手, 入门简单, 文档丰富, 文档中有很多参考案例支持简单的单元测试和复杂的功能测试支持参数化执行测试用例过程中, 支持跳过操作支持重复失败的case支持运行Nose, unittest编写测试用例pytest支持很多第三方插件方便和持续集成工具集成 1. pytest断…

如何搭建独享的IP代理池?

随着互联网技术的日趋成熟&#xff0c;爬虫已经成为一种常见的数据获取方法。在采集业务中&#xff0c;建立本地IP代理池是非常重要的。今天将与您探讨IP代理池的选择以及如何搭建独享的IP代理池。 独享IP代理池是指由客户单独使用的IP池&#xff0c;优点是客户可以享受池中所…

关于opencv中cv2.imread函数读取的图像shape问题

图像坐标系是&#xff08;w,h&#xff09;,w为x轴&#xff0c;h为y轴,(x,y) 但opencv读出来的数组却正好相反&#xff0c;是&#xff08;h,w,3&#xff09;,(y,x,3) 所以这里会有一个转换 image cv2.imread(1.jpg) print(image.shape[0:2]) ##输出&#xff08;365,500&#x…

【操作系统】Linux编程 - 多线程的创建和使用 II (临界区 、互斥量、信号量的使用)

临界区的概念 之前的实例中我们只尝试创建了1个线程来处理任务&#xff0c;接下来让我们来尝试创建多个线程。 不过&#xff0c;还是得先拓展一个概念——“临界区” 临界区指的是一个访问共用资源&#xff08;例如&#xff1a;共用设备或是共用存储器&#xff09;的程序片段&…

哈工大计算机网络课程网络层协议详解之:Internet路由BGP协议详解

哈工大计算机网络课程网络层协议详解之&#xff1a;BGP协议详解 在之前的网络层协议中&#xff0c;我们介绍了Internet网络两个自治系统内的路由协议&#xff1a;RIP协议和OSPF协议。这两个协议应该来说是自治系统内协议的两个代表性协议&#xff0c;前一个基于距离向量路由算…

优化内存利用:深入了解垃圾回收算法与回收器

&#x1f52d; 大家好&#xff0c;我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&#xff1a;JVM &am…

机器学习面试题- 特征工程

目录标题 1、为什么要对特征做归一化2、对特征归一化的方法2.1 线性函数归一化2.2 零均值归一化 3、对数据预处理时&#xff0c;如何处理类别型特征3.1 序号编码3.2 独热编码3.3 二进制编码 4、什么是组合特征&#xff1f;如何处理高维组合特征&#xff1f;5、怎样有效地找到组…