C++(线程)

一、线程

1、线程构造函数

类模板原型:template <class Fn, class... Args>explicit thread (Fn&& fn, Args&&... args);

1)thread(线程的构造函数)

格式:#include <thread>thread 线程名(回调函数名 fn , 传递给回调函数的参数 args (数量不定,可以不写));
功能:以线程名,创建一个线程
参数 fn  :线程主函数(或者叫线程入口函数),用户传哪个函数的函数名,线程就执行哪个函数
参数 args:可变参数,允许传入多个不同的参数,给到线程函数 fn,一般来说,这里args传递几个参数,fn就需要写几个对应的形参注意:如果运行报错已放弃,就说明main结束了,没有回收线程资源

2)thread类模板内的成员方法

thread t;
t.join();// 等待,并回收线程t的资源,但是join函数不接受线程主函数的返回值
t.detach();//将线程t设置成分离式线程,进程结束运行的时候,会自动的回收分离式线程的资源
t.joinable(); // 判断线程 t 是分离式的还是结合式的

2、线程回调类中的函数

        Stu::func(类中的静态函数地址)&Stu::func(类中的成员函数的地址)

        线程是不能直接通过对象回调成员方法的,那么就需要其他的方法

Stu zs;
thread t(zs.func);
注意:想要通过对象名回调成员方法这种方法是不行的,是会报错的

1)static(设置静态成员方法)

将类中的成员方法设置为静态成员后,就直接归属于类了,就可以直接通过类名调用了

 2)lambda(使用匿名函数调用)

3)bind(绑定对象和参数)

4)function 和 bind 结合使用

想要用线程回调类中的成员方法,必须确定,回调的是哪个对象的成员属性。

3、关于function类(函数包装器)

  • function 是一个通用的多态函数封装器;
  • function 是一个类模板,可以存储、调用和复制任何可调用对象,比如函数、lambda 表达式或函数对象;
  • function 可以理解为一个封装后的函数指针,功能更加强大;

1)function 的使用

#include <functional>;
function<返回值类型(形参列表)> 对象名 = 函数指针;类模板不定参: <返回值类型(形参列表)>: 是创建对象的类型,应该用函数指针所指向的函数的数据类型
返回值类型: 必须写函数指针指向的函数的返回值类型
形参列表:   不一定要按照函数指针指向的函数的形参列表填,应当填入通过function类的对象传入的参数类型
对象名:     绑定后可以通过对象名调用 函数指针注意:形参列表的位置,是需要传什么参数填什么参数的类型,如果需要传对象的地址,就要填入 类名*const

2)function包装普通函数指针

        将函数指针包装到对象中,通过对象传参调用函数

3)function包装类成员方法指针

1)bind 的使用

格式:template <class Ret, class Fn, class... Args>bind (Fn&& fn, Args&&... args);
功能:为指定函数绑定参数
参数 fn  :函数指针,要绑定的函数
参数 Args:要绑定的参数如果想先不绑定,后面调用在传入,可以使用placeholaers这个类中的占位符 _n 来占位(n表示占第n个占位符)
使用方法:1.bind(函数指针,要传入的参数(不定参));           //绑定普通的函数指针2.bind(函数指针,对象的地址,要传入的参数(不定参)); //绑定类中的成员方法3.bind(函数指针,参数1,参数2,placeholaers::_1);  //占位符占位,后续再传参

2)使用bind绑定后包装普通函数指针

3)使用bind绑定后包装类成员方法指针

(1)bind绑定对象和参数

(2)bind绑定对象,不绑定参数

(3)bind绑定参数,不绑定对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cf.训练

1. Buying Lemonade Buying Lemonade 解题思路&#xff1a; 排序&#xff1a;将插槽的罐数 a 从小到大排序&#xff08;sort(a, an)&#xff09;。 特殊情况处理&#xff1a; 若最小罐数足够大&#xff08;a[0] > k/n 且 k%n0&#xff09;或 k1&#xff0c;直接输出 k&…

JAVA无人共享球杆柜系统球杆柜租赁系统源码支持微信小程序

JAVA无人共享球杆柜系统&#xff1a;物联网小程序打造高尔夫租赁新体验市场机遇与行业痛点1. 高尔夫球杆租赁市场蓝海市场规模快速增长&#xff1a;2023年中国高尔夫球杆行业市场规模达到14.77亿元&#xff0c;预计2024年将突破15.75亿元。全球高尔夫装备市场2024年达到132.6亿…

uniapp Android App集成支付宝的扫码组件mPaaS

第一步&#xff0c;设置包名&#xff0c;下载插件导项目中 在manifest.json中添加package, 设置完指定的包名后&#xff1a;Hbuilderx打包时包名也会变化 变成 下载插件导项目中&#xff0c; 第二步&#xff1a;进入阿里云mPaas后台完成代码配置&#xff0c;下载配置文件http…

Effective C++ 条款22: 将成员变量声明为private

Effective C 条款22&#xff1a;将成员变量声明为private核心思想&#xff1a;始终将成员变量声明为private&#xff0c;通过函数接口控制访问&#xff0c;提供封装弹性、精确访问控制和一致性维护点。 ⚠️ 1. 公开成员的致命缺陷 数据一致性破坏&#xff1a; class AccessPoi…

Java基础-斗地主游戏

目录 案例要求&#xff1a;​ 实现思路&#xff1a; 代码&#xff1a; Main启动类&#xff1a; Card实体类&#xff1a; Room操作类&#xff1a; 总结&#xff1a; 案例要求&#xff1a; 实现思路&#xff1a; 1构造卡牌,细节&#xff1a;实体类另设一个int类型变量表示…

基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用

基于Java和AI技术处理动漫视频 以下是一些基于Java和AI技术处理动漫视频(如《亚久斗》)的实用案例和实现方法,涵盖视频分析、风格转换、角色识别等方向。每个案例均提供技术思路和关键代码片段。 视频关键帧提取 使用OpenCV提取动漫视频中的关键帧,保存为图片供后续分析…

Qt 自动无法加载数据库为空

解决方式:main() 中设置QDir::setCurrent(QCoreApplication::applicationDirPath());即可 1、开机自启 void setAutoStart(bool enable) {QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);QS…

vue3指定设置了dom元素的ref但是为null问题

目录 问题场景 ​编辑问题原因 解决方案 问题场景 可以看到我指定了元素的ref&#xff0c;正常来说在组件挂载完毕后可以通过ref.value正常获取到dom元素 但是实际打印出来为null 问题原因 根本原因就是v-if指令的问题&#xff0c;v-if指令能够控制元素是否渲染&#xff0…

控制建模matlab练习08:根轨迹

此练习主要是&#xff1a;在matlab中绘制根轨迹的方法。 一、在matlab中建立对应系统 1、例如&#xff0c;对于如图的反馈系统。 2、其中开环传递函数G(s)、闭环传递函数Gcl(s)。3、因此&#xff0c;其闭环传递函数的根轨迹&#xff0c;就可以直接在matlab中绘制出来。 4、直接…

深度学习中的三种Embedding技术详解

提纲背景介绍特征类型与Embedding方法1. ID类特征的Embedding处理1.1 标准Embedding方法1.2 IdHashEmbedding方法2. 数值型特征的Embedding处理2.1 RawEmbedding方法三种Embedding方法对比总结实践建议总结背景介绍 在深度学习领域&#xff0c;Embedding&#xff08;嵌入&…

前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)

八、DOM 编程1&#xff0e;DOM&#xff08;Document Object Model&#xff09;,文档对象模型&#xff1a;将 HTM L文档进行模型化处理&#xff0c;形成一颗结构化的文档树&#xff0c;从而提供访问&#xff0c;修改文档的统一编程接口&#xff08;API&#xff09;&#xff0c;一…

Spring Boot 的事务注解 @Transactional 失效的几种情况

开发中我们经常会用到 Spring Boot 的事务注解&#xff0c;为含有多种操作的方法添加事务&#xff0c;做到如果某一个环节出错&#xff0c;全部回滚的效果。但是在开发中可能会因为不了解事务机制&#xff0c;而导致我们的方法使用了 Transactional 注解但是没有生效的情况&…