当前位置: 首页 > news >正文

C++多线程学习(二、多线程的几种创造方式【有返回值的之后讲】)

目录

创建多线程

1.普通函数充当线程处理函数创造线程

2.Lambda表达式充当线程处理函数

3.带参函数创建线程

3.1普通参数

3.2传入引用

3.3智能指针充当函数参数

4.通过类中的成员函数创建

4.1仿函数方式创建:类名的方式调用

4.2普通类中的成员函数


创建多线程

1.普通函数充当线程处理函数创造线程

#include <thread>
#include <iostream>
using namespace std;
void ThreadPrint()
{cout << "线程启动" << endl;
}
void ThreadOpen()
{thread t1(ThreadPrint);//无输入无返回值的函数t1.join();
}
int main()
{ThreadOpen();return 0;
}

2.Lambda表达式充当线程处理函数

#include <thread>
#include <iostream>
using namespace std;void ThreadLambda()
{thread t1([]() {cout << "Lambda表达式充当线程处理函数" << endl; });t1.join();
}
int main()
{ThreadLambda();return 0;
}

3.带参函数创建线程

3.1普通参数

#include <thread>
#include <iostream>
using namespace std;void WhatYourYear(int num)//const int num 也是可以的
{cout << "your year:" << num << endl;
}
void ThreadHaveInt(int Pnum)//创建带参数的普通线程,你需要有这个数
{int num = 1;thread t1(WhatYourYear, num);t1.join();thread t2(WhatYourYear, Pnum);t2.join();
}
int main()
{ThreadHaveInt(9);return 0;
}

3.2传入引用

#include <thread>
#include <iostream>
using namespace std;void IntoRef(int& num)//如果加上const,把 num=1001删除
{num = 1001;cout << "子线程" << num << endl;
}
void ThreadHaveRef()
{int num = 0;thread t1(IntoRef, ref(num));//这里thread后面传入的为&&,所以对num要包装引用作为传递的值t1.join();cout << "主线程" << num << endl;
}
int main()
{ThreadHaveRef();return 0;
}

3.3智能指针充当函数参数

因为智能指针是不能被复制的,而是具有所有权的资源管理对象,因此不能直接传递给子线程的函数。

所以通过使用move函数,来将智能指针ptr从主线程移动到新的子线程中,将ptr的所有权转移到子线程中,以便在子线程中正确访问智能指针的资源,可以实现将智能指针的所有权从一个上下文转移到另一个上下文。

#include <thread>
#include <iostream>
using namespace std;void printPtr(unique_ptr<int> ptr)
{cout << "智能指针" << ptr.get()<< endl;
}
void ThreadSmartPtr()
{unique_ptr<int> ptr(new int(100));cout << "主线程打印:" << ptr.get() << endl;thread t1(printPtr, move(ptr));//move语句作为处理t1.join();cout << "转移后的主线程打印:" << ptr.get() << endl;//是空的
}
int main()
{ThreadSmartPtr();return 0;
}

4.通过类中的成员函数创建

4.1仿函数方式创建:类名的方式调用

#include <thread>
#include <iostream>
using namespace std;class TestFunction
{
public:void operator()(){cout << "重载()" << endl;}
};
void ThreadOperator()
{TestFunction TF1;//直接通过类创建对象,将对象传入线程thread t1(TF1);//这样就会调用一下void operator()()t1.join();//匿名对象thread t2((TestFunction()));//多加一个()帮助进行解析t2.join();
}
int main()
{ThreadOperator();return 0;
}

4.2普通类中的成员函数

#include <thread>
#include <iostream>
using namespace std;class LH
{
public:void print(int& num)//自己选择用什么模式的函数{cout << "people:" << num << endl;}
};
void ThreadClassOne()
{LH a;//指定对象int num = 1;thread t1(&LH::print, a, ref(num));//哪个类的函数,哪个对象,传入的值t1.join();
}
int main()
{ThreadClassOne();return 0;
}

相关文章:

C++多线程学习(二、多线程的几种创造方式【有返回值的之后讲】)

目录 创建多线程 1.普通函数充当线程处理函数创造线程 2.Lambda表达式充当线程处理函数 3.带参函数创建线程 3.1普通参数 3.2传入引用 3.3智能指针充当函数参数 4.通过类中的成员函数创建 4.1仿函数方式创建&#xff1a;类名的方式调用 4.2普通类中的成员函数 创建多…...

前端开发框架生命周期详解:Vue、React和Angular

引言 作为前端开发者&#xff0c;掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中&#xff0c;Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期&#xff0c;包括每个阶段的含义、用途以及如何最大限度地利用它们。通…...

【Java从入门到大牛】程序流程控制

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Java从入门到大牛 &#x1f320; 首发时间&#xff1a;2023年7月7日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e…...

UML学习统一建模语言

unified modeling language 统一建模语言 面向对象软件分析与设计建模的事实标准 类命名&#xff1a;帕斯卡特命名 类之间的关系 关联关系&#xff1a;班级和学生&#xff0c;一个类的对象作为另一个类的成员变量&#xff1b; 通过非构造和setter注入的方式建立联系&#xf…...

【C++学习笔记】RAII思想——智能指针

智能指针 1 内存泄漏问题2 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;2.1 使用RAII思想设计的SmartPtr类2.2 智能指针的原理2.3 小总结智能指针原理 3 智能指针的拷贝问题3.1 std::auto_ptr3.2 std::unique_ptr3.3 std::shared_ptr3.3.1 拷贝构造函数…...

ubantu配置python环境

安装python 参考博客 安装pycharm 博客 创建Pycharm快捷方式 博客 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compiled with File “/home/r00t/IdeaProjects/data/venv/lib/python3.9/site-packages/urllib3/init.py”…...

单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第五章《单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法》…...

dockerfile常用指令

Dockerfile常用指令 视频学习资料来源这里&#xff0c;点击本行文字即可跳转&#xff0c;讲的比较详细&#xff0c;不过比较老&#xff0c;跟最新的肯定是有一些差异的 Dockerfile官网文档的话点击这里 中文文档可以看看这个&#xff0c;不过没有详细的代码demo 或者是看这个 或…...

Matlab/simulink与dsp28335联合开发教程

一&#xff0e;入门篇&#xff08;开发环境搭建&#xff09; 1.1 Code Composer Studio 软件安装1.2 MATLAB 软件安装1.3 Control_SUIT3.4 软件安装1.4 C2000 Simulink 开发工具箱安装1.5 Visual_Studio_Professional 二. 基础篇&#xff08;片内外设使用&#xff09; 2.1 G…...

新项目搞完啦!!!

大家好&#xff0c;我是鱼皮。 经过了 7 场直播&#xff0c;总时长近 20 小时&#xff0c;我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目&#xff0c;完结啦&#xff01; 我在这里对该项目做一个简单的总结&#xff0c;希望让更多需要它的同学看到&am…...

分享一个可交互的小场景(二)

先看效果&#xff1a; 可互动的小场景 再看代码&#xff1a; JS部分 <script>var rotateDiv document.getElementById(rot);var rotateIcons document.getElementById(rot-icons);var clickRotateDiv document.getElementById(click-rot);var angle 0;clickRotateDi…...

2.5 DNS 应用 -- 1. DNS 概述

2.5 DNS 应用 -- 1. DNS 概述 DNS&#xff1a;Domain Name SystemDNS分布式层次式数据库DNS根域名服务器TLD和权威域名解析服务器本地域名解析服务器 DNS 查询迭代查询递归查询 DNS记录缓存和更新 DNS&#xff1a;Domain Name System Internet上主机/路由器的识别问题 IP地址域…...

基于STM32麦克风阵列音频信号处理系统设计

v hezkz17进数字音频系统研究开发交流答疑 附录: ADAU1452音频处理系统...

《重构》:Extract Class and Inline Class

hey&#xff0c;gays lets go on to refator those sh!t . i fork a rep, this the link GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计 all right, lets see the genel description. 提取类 对立&#xff1a;内联类 目的&#xff1a;将大类分成小类 场景&a…...

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

随着数字化进程不断深入&#xff0c;数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求&#xff0c;湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中&#xff0c;湖仓一体&#xff08;Lake house&#xff09;首次…...

ExceptionLess windows部署。

前言 windows部署 1、一个api项目&#xff0c;里面包含了所有api。 2、一个elasticsearch项目&#xff0c;用来存储相关数据。 3、一个UI项目&#xff0c;也就是查看异常、设置新异常邮件通知等操作的后台。 异常在客户端提交的代码原理&#xff1a;一个异常被提交&#xff0c;…...

使用python实现1DCNN-GRU回归预测

要实现1DCNN-GRU进行回归预测&#xff0c;您可以使用以下Python代码作为参考&#xff1a; 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import tensorflow as tf from tensorflow.keras.layers import Conv1D, MaxPooling1D, GlobalAveragePooling1D, GRU,…...

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…...

Linux文件系统概述

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 文件系统概述 前言正文文件与磁盘磁盘介绍与机械硬盘机械硬盘基础结构机械硬盘数据存储与管理 文件操作的细节创建文件访问文件删除文件恢复文件其他情况 最后 前言 …...

go专业数据结构与算法

go语言之专业数据结构与算法 2.数组概念 3.golang实现数组结构 4.golang实现数组迭代器 5.数组栈的高级实现 6.栈模拟低级递归 7.斐波那契数列栈模拟递归 8.递归实现文件夹遍历 9.栈模拟文件递归 10.层级展示文件夹 11.数组队列的实现 12.队列实现遍历文件夹 13.循环队列 14.链…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...