C++多线程:this_thread 命名空间
std::this_thread
是 C++ 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。这个命名空间提供了许多与线程操作相关的工具,使得在多线程环境中更容易进行编程。
源码类似于如下:
namespace std{namespace this_thread{//...................}
}
get_id( )
get_id( )
std::this_thread::get_id()
: 返回当前线程的唯一标识符,类型为 std::thread::id
。可以用来识别不同的线程。
两种方法获取线程ID
方法一: 利用线程名中的API接口获取(推荐)
void myFunction(){}
int main()
{;std::thread myThread(myFunction);std::thread::id myThreadId = myThread.get_id();cout << "myThreadId: " << myThreadId << endl;myThread.join();
}
方法二: 在线程函数中利用this_thread返回当前线程的ID
void myFunction(){// 获取当前线程的IDstd::thread::id threadId = std::this_thread::get_id();std::cout << "Thread ID inside myFunction: " << threadId << std::endl;
};int main()
{// 创建线程std::thread myThread(myFunction);//等待线程执行完成myThread.join();// 获取当前主线程的IDstd::thread::id mainThreadId = std::this_thread::get_id();std::cout << "Main Thread ID: " << mainThreadId << std::endl;
}
yield( )
std::this_thread::yield() 是 C++ 标准库中的一个函数,它的作用是让当前线程放弃其执行权,主动让出 CPU 时间片,以便其他线程有机会执行。具体来说,yield() 函数的调用会导致当前线程进入就绪态,允许调度器在就绪线程中选择另一个线程来执行。
这个函数的原型如下:
namespace std {namespace this_thread {void yield() noexcept;}
}
使用 yield()
的主要场景是在多线程编程中,当一个线程希望让出 CPU 执行权,以便其他线程能够执行。这样可以更好地利用系统资源,提高多线程程序的效率。以下是一个简单的示例,演示了 yield()
的基本用法:
#include <iostream>
#include <thread>
void worker() {for (int i = 0; i < 5; ++i) {std::cout << "Worker: " << i << std::endl;std::this_thread::yield(); // 让出执行权}
}int main() {std::thread workerThread(worker);for (int i = 0; i < 5; ++i) {std::cout << "Main: " << i << std::endl;std::this_thread::yield(); // 让出执行权}workerThread.join();return 0;
}
sleep_for()
std::this_thread::sleep_for(): 让当前线程休眠一段指定的时间。
#include <iostream>
#include <chrono>
int main() {std::cout << "Sleep for 2 seconds...\n";std::this_thread::sleep_for(std::chrono::seconds(2));std::cout << "Awake!\n";return 0;
}
std::chrono
是C++11提供的时间库(更具体说它也是一个命名空间,它的库头文件名和命名空间名称相同)。库中的核心组件是持续时间(duration),它是时间段的表示。持续时间可以以秒、毫秒、微秒等不同单位表示。例如,std::chrono::seconds表示以秒为单位的时间段,而std::chrono::milliseconds和std::chrono::microseconds分别表示毫秒和微秒。
原型如下:
namespace std {namespace chrono{..............}
}
std是一级命名空间,chrono是二级命名空间。
sleep_until( )
std::this_thread::sleep_until()
用于让当前线程休眠直到指定的时间点。该函数接受一个表示时间点的参数,并在当前线程休眠直到达到或超过该时间点。使用 sleep_until()
可以在程序中实现对时间的精确控制。
以下是 sleep_until()
函数的原型:
namespace std {namespace this_thread {template<class Clock, class Duration>void sleep_until(const chrono::time_point<Clock, Duration>& sleep_time);}
}
sleep_until()
接受一个时间点参数,其中 Clock
表示时钟类型,Duration
表示时间间隔类型。通常,Clock
和 Duration
会使用 std::chrono
命名空间中的类型。
下面是一个示例,演示如何使用 sleep_until()
将当前线程休眠至指定时间点:
在这个例子中,sleep_until()
被用来休眠当前线程至指定的时间点。首先获取了当前时间点 now
,然后计算了一个未来的时间点 sleep_time
(当前时间点之后的5秒),最后通过 sleep_until()
函数实现线程的休眠。
#include <iostream>
#include <thread>
#include <chrono>
int main() {// 获取当前时间点auto now = std::chrono::system_clock::now();// 设置休眠时间为当前时间点之后的5秒auto sleep_time = now + std::chrono::seconds(5);std::cout << "Sleeping until: " << std::chrono::system_clock::to_time_t(sleep_time) << std::endl;// 休眠至指定时间点std::this_thread::sleep_until(sleep_time);std::cout << "Awake!" << std::endl;return 0;
}
打印输出:
std::chrono::system_clock::to_time_t(sleep_time)
:将时间点转为时间戳(距离1970年1月1日零时零分零秒的间隔秒数)
相关文章:

C++多线程:this_thread 命名空间
std::this_thread 是 C 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。这个命名空间提供了许多与线程操作相关的工具,使得在多线程环境中更容易进行编程。 源码类似于如下: namespace std{namespace this_thread{//...........…...

《山雨欲来-知道创宇 2023 年度 APT 威胁分析总结报告》
下载链接: https://pan.baidu.com/s/1eaIOyTk12d9mcuqDGzMYYQ?pwdzdcy 提取码: zdcy...

Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)
一.什么是信号和槽 信号槽式Qt中的一个很重要的机制。信号槽实际上是观察者模式,当发生了感兴趣的事件,某一个操作就会被自动触发。当某个事件发生之后,比如按钮检测到自己被点击了一下,它就会发出一个信号。这种发出类似广播。如果有对象对…...
彻底弄懂mktemp命令的作用
mktemp 是一个在 Unix 和类 Unix 系统中用于创建临时文件或目录的命令行工具。它属于 GNU coreutils 套件的一部分。mktemp 的主要优点是它能够生成一个唯一的文件名,这有助于避免文件名冲突,并且可以安全地创建临时文件,因为这些文件通常只有…...

政安晨:示例演绎TensorFlow的官方指南(二){Estimator}
咱们接着演绎TensorFlow官方指南,我的这个系列的上一篇文章为: 政安晨:示例演绎TensorFlow的官方指南(一){基础知识}https://blog.csdn.net/snowdenkeke/article/details/136067030为什么要演绎官方指南,我…...

vue3:24—组件通信方式
目录 1、props 2、自定义事件 (emit) 3、mitt(任意组件的通讯) 4、v-model【封装ui组件库用的多,平时用的少。和vue2有点不同】 5、$attrs 6、$refs和$parent 7、provide和inject 8、pinia(即vue2中…...

WebGL+Three.js入门与实战——绘制水平移动的点、通过鼠标控制绘制(点击绘制、移动绘制、模拟画笔)
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

大数据环境搭建(一)-Hive
1 hive介绍 由Facebook开源的,用于解决海量结构化日志的数据统计的项目 本质上是将HQL转化为MapReduce、Tez、Spark等程序 Hive表的数据是HDFS上的目录和文件 Hive元数据 metastore,包含Hive表的数据库、表名、列、分区、表类型、表所在目录等。 根据Hive部署模…...

mac电脑上使用android studio创建flutter项目
mac电脑环境配置可以看这篇文章:https://xiaoshen.blog.csdn.net/article/details/136068650 配置玩环境之后,开始创建第一个flutter项目:点击new flutter project或者new project都可以 然后选择flutter: 并将sdk配置为解压后的…...

Excel——分类汇总
1.一级分类汇总 Q:请根据各销售地区统计销售额总数。 第一步:排序,我们需要根据销售地区汇总数据,我们就要对【销售地区】的内容进行排序。点击【销售地区】列中任意一个单元格,选择【数据】——【排序】,…...
Backtrader 文档学习- Observers - Reference
Backtrader 文档学习- Observers - Reference 1.Benchmark class backtrader.observers.Benchmark() 观察器存储策略的回报和参考资产的回报,参考资产是传递给系统的数据之一。 参数: timeframe (default: None) ,如果None,则将…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Radio组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Radio组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Radio组件 单选框,提供相应的用户交互选择项。 子组件 无。 接口 …...
【go】结构体切片去重
场景 自定义结构体切片,去除切片中的重复元素(所有值完全相同) 代码 // 自定义struct去重 type AssetAppIntranets struct {ID string json:"id,omitempty"AppID string json:"app_id,omitempty"IP …...

百面嵌入式专栏(面试题)C语言面试题22道
沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍C语言相关面试题 。 宏定义是在编译的哪个阶段被处理的?答案:宏定义是在编译预处理阶段被处理的。 解读:编译预处理:头文件包含、宏替换、条件编译、去除注释、添加行号。 写一个“标准”宏MIN,这个…...
Docker方式创建keepalived连接MGR集群
记录一下简单的搭建步骤以便后期查验 目录 前言步骤1. 安装环境2. 重新制作镜像3. 导入新镜像4. 创建容器 前言 假设已经搭建了MySQL8的MGR集群方式(一主两从)。 MGR本身有故障转移重新选举新的主节点功能,但是上游的应用程序需要自己手动修…...
Oracle PL/SQL Programming 第5章:Iterative Processing with Loops 读书笔记
总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版 本章探讨 PL/SQL 的迭代控制结构(也称为循环),它允许您重复执行相同的代码。 PL/SQL 提供了三种不同类型的循环结构: 简单或无限循环FOR 循环&#x…...
C入门番外篇——C, Are you OK?
今日路上看到一个车牌,52U0K,感觉很有意思,如果做一下简单的翻译就是,“我爱你,好么?” 这样让我脑子中闪现了这样的一个画面:“一个男生追一个女生,看到女生不怎么搭理自己的样子&a…...

python-产品篇-游戏-象棋
文章目录 代码效果 代码 import pygame import time import constants from button import Button import pieces import computerclass MainGame():window NoneStart_X constants.Start_XStart_Y constants.Start_YLine_Span constants.Line_SpanMax_X Start_X 8 * Lin…...
用linux文件系统的链接功能实现文件缓存LRU
概述: 目前,随着家庭宽带网络、无线宽带技术,以及终端设备性能的不断发展,基于多媒体的应用越来越广泛,特别是互联网视频的应用更是成为推动这些技术发展的源动力。作为互联网视频VOD的应用,提高视频播放的流畅度是一个非常重要的指标之一。除了编解码技术,视频C…...

AI大模型开发架构设计(10)——AI大模型架构体系与典型应用场景
文章目录 AI大模型架构体系与典型应用场景1 AI大模型架构体系你了解多少?GPT 助手训练流程GPT 助手训练数据预处理2个训练案例分析 2 AI 大模型的典型应用场景以及应用架构剖析AI 大模型的典型应用场景AI 大模型应用架构 AI大模型架构体系与典型应用场景 1 AI大模型架构体系你…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...