C++:std::thread

2023-11-05

1.std::thread的用法

头文件为:

#include <thread>

2.例子

#include <thread>
#include <iostream>
#include <unistd.h>

using namespace std;

void thread_fun1(int val)
{
	cout << "Thread::val="<<val<<endl;
}

class Task
{
public:
	void Task_fun(int val)
	{
		cout << "Task::val="<<val<<endl;
	}
};

int main()
{
	int i = 1;
	Task task;
	Task bind_task;
    //1.直接使用函数
	std::thread thread1(thread_fun1,i);
	usleep(100);
	//2.使用类成员函数
	std::thread thread2(&Task::Task_fun,&task,i);
	usleep(100);
	//3.使用std::bind
	std::thread thread3(std::bind(&Task::Task_fun, &bind_task, 2));
	usleep(100);
	//4.使用lambda表达式
	std::thread thread4([](){
		cout << "called lambda thread" <<endl; 
	});
	usleep(100);
	
	thread1.join();//等待子线程结束
	thread2.join();
	thread3.join();
	thread4.join();
	
	return 0;
}

结果:

Thread::val=1
Task::val=1
Task::val=2
called lambda thread

3. std::join和std::detach

std::thread在栈中创建之后处于joinable状态,必须需要调用join或者 detach函数来使线程处于非joinable状态,原因为下图,当同一作用域下退出时,调用thread的析构函数,如果线程处于joinable状态,会调用std::terminate()用来终止进程的调用

img

join()//阻塞等待子线程结束
detach()//脱离父线程,父子线程同时运行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:std::thread 的相关文章

  • 如何指定 set precision 舍入

    当流到 std 输出时 我可以指定 set precision 对双精度值进行舍入吗 ofile lt lt std setprecision 12 lt lt total run time TIME lt lt n Output 0 75
  • 了解 VerQueryValue

    在 MSDN 上 我注意到 VerQueryValue 函数的以下内容 lplp缓冲区 输出 低电压空洞当此方法返回时 包含指向 pBlock 指向的缓冲区中所请求版本信息的指针的地址 当关联的 pBlock 内存被释放时 lplpBuff
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • C 语言中的套接字如何工作?

    我对 C 中的套接字编程有点困惑 You create a socket bind it to an interface and an IP address and get it to listen I found a couple of
  • 如何让BackgroundWorker返回一个对象

    我需要做RunWorkerAsync 返回一个List
  • 从 C++ 中的函数返回二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 从函数返回多维数组 https stackoverflow com questions 3716595 c returning multidimension array from function
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 如何在方法模板中使用模板类型的引用传递参数?

    我目前正在努力编译以下代码 首先是包含带有方法模板的类的头文件 ConfigurationContext h class ConfigurationContext public template
  • MouseDoubleClick 事件不会冒泡

    我的场景经过简化 我有一个包含员工行的 ListView 在每个员工行中 都有 增加 和 减少 按钮来调整他的工资 假设在我的程序中 双击 员工 行意味着 解雇此人 The problem是当我快速单击 增加 时 这会触发 ListView
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • 为什么这段代码不会产生编译错误?

    template
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 初始化二维数组时出现分段错误

    我已经检查过我的代码是否正确地划分了内存空间 但是一旦我尝试将 2D 数组初始化为某些值 然后对这些值求和 我就会在 2x2 数组上收到分段错误 我想最终将我的代码扩展到更大的数组 但我什至无法让它在这里工作 我知道有很多关于 malloc
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List
  • 通过开源 PCL 使用 API 查看 3D 点云

    我使用 ToF 飞行时间 相机来获取 XYZ 格式的深度数据 为了实现 3D 点云的可视化目的 我想使用开源 PCL 提供的 API 网址为http pointclouds org documentation tutorials pcl v
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化
  • 如何在 C# 中将 json 转换为平面结构

    我正在尝试用 C 编写函数 将 JSON 转换为键 值对 它应该支持数组 例如下面的 JSON title title value components component id id1 menu title menu title1 tit

随机推荐

  • Jenkins Pipeline 项目持续集成交互实践路径

    Jenkins Pipleline插件介绍 Jenkins 2 x的精髓是Pipeline as Code 是帮助Jenkins实现CI到CD转变的重要角色 什么是Pipeline 简单来说 就是一套运行于Jenkins上的工作流框架 将原
  • keil5 不进入中断_C51编程20中断篇(串行通讯3)

    MCS 51单片机提供了4种串口的方式 但是我们只有方式1最常用 可变的10位串行通讯方式 下面就方式1的使用进行讲解 在开始之前先明确一个概念 中断会产生中断标志位 而CPU检测到中断标志位后 如果没有其他更高的中断在执行 CPU会响应该
  • redis的缓存穿透 缓存并发 缓存失效

    学习网址 https www cnblogs com shuchen007 p 9656232 html 截选一个集体缓存失效解决办法 引起这个问题的主要原因还是高并发的时候 平时我们设定一个缓存的过期时间时 可能有一些会设置1分钟啊 5分
  • Java课题笔记~ JSP内置对象

    1 九个内置对象 jsp的内置对象 JSP内置对象是不需要声明和创建就可以在JSP页面脚本中使用的成员变量 九个内置对象 1 out对象 在JSP页面中 经常需要向客户端发送文本内容 这时 可以使用out对象来实现 out对象是javax
  • 帆软下拉复选框,层级树状选择

    treelayer函数 1 概述 语法 treelayer TreeObject Int Boolean String 定义 返回一个树对象 TreeObject 第 n 层的值 一般为树数据集 或下拉树 视图树等树对象 并且可以设置返回值
  • mysql大表修改字段导致锁表(非阻塞)

    线上数据库难免会有修改表结构的需求 MySQL 在修改表结构时会锁表 这就会影响读写操作 小表还好 一会儿就修改完成了 但大表会比较麻烦 下面看一个解决方案 一 方式一 解决思路 1 新建一个表 结构就是要修改后的结构 2 在旧表上建立触发
  • 整合vxgPlayer使chrome支持vxg_media_player播放rtsp视频,目前全网唯一chrome支持rtsp,rtmp流的播放器

    目前有一个关于接入海康监控进行视频融合的项目需求 按理说在前端技术发展如此迅速的今天 使用web播放一个视频应该是不算什么难事 只是万事都有意外 因很多视频厂家的监控数据都不是普通的mp4啥的 所以使用普通的object 或者video 是
  • 单片机STM32在开发中常用库函数详解

    1 GPIO初始化函数 用法 voidGPIO Configuration void GPIO InitTypeDefGPIO InitStructure GPIO状态恢复默认参数 GPIO InitStructure GPIO Pin G
  • 【Leetcode】107. 二叉树的层序遍历 II

    题目描述 题解 很简单 分层的层序遍历 并且插入List
  • kafka异常:Uncaught exception in kafka-producer-network-thread 异常:Kafka scheduler has not been started

    版本 kafka 2 11 0 8 2 2 client java client 现象 kafka写入数据失败 没有异常信息 kafka客户端生产者日志 服务器一 2016 04 25 10 53 31 764 ERROR org apac
  • 【sklearn】fit()、transform()和fit_transform()的区别

    fit Method calculates the parameters mu and sigma and saves them as internal objects 解释 简单来说 就是求得训练集X的均值 方差 最大值以及最小值等这
  • 一些适用于ARM Cortex-M系列的动态加载库

    当涉及到ARM Cortex M系列芯片时 有许多适用于该系列的动态加载库 以下是其中一些 C OS III 它是一个基于优先级的实时操作系统 支持多任务和动态库加载 它为Cortex M系列芯片提供了完整的支持 包括ARM Cortex
  • 把玩数据在内存中的存储

    前言 时光如梭 今天到了C语言进阶啦 基础知识我们已经有了初步认识 是时候该拔高拔高自己了 目标 掌握浮点数在内存的存储 整形在内存的存储 鸡汤 时光易过 岁月蹉跎 深度剖析数据在内存中的存储 1 数据类型的介绍 前面已经讲解过了 可以再看
  • vue-element-admin第一篇:vue-element-admin初始项目

    1 事前准备 下载项目 https gitee com mirrors vue element admin git 执行代码 npm install npm run dev OK 准备工作完成 如果有报错 请移步到度娘那里去 2 先分析模块
  • [YOLO专题-10]:YOLO V5 - ultralytics/detect检测代码的命令行参数详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122266884 目录 第1章 准备
  • python时序数据处理2--提取年月信息、时间作差等

    同样首先先生成时序数据 1 生成时序数据 import pandas as pd import numpy as np from datetime import datetime timedelta test pd date range 2
  • 3.1 代码审核机制

    一次咨询活动 同一朋友交流基于复用的架构设计理念时 他说 你讲的那个很好 但离我们现状有点远 我现在每天要编码 要开会 要出差 要交流 要带人 要流程 招个能干的人可难了 而刚做顺手的就想跑 留一堆代码让我擦屁股 一段话不知道出了多少一线工
  • 三极管相关知识

    NPN型三极管 NPN型三极管 由三块半导体构成 其中两块N型和一块P型半导体组成 P型半导体在中间 两块N型半导体在两侧 三极管是电子电路中最重要的器件 它最主要的功能是电流 放大和开关作用 半导体三极管也称为晶体三极管 可以说它是电子电
  • Riverbed补齐最后一块拼图

    如果你知道APM Application Performance Management 应用性能管理 和NPM Network Performance Management 网络性能管理 应该知道它很重要 道理很简单 很多问题都是管理问题
  • C++:std::thread

    1 std thread的用法 头文件为 include