C++笔记之初始化线程的所有方法

news2024/9/25 5:22:41

code review!

C++笔记之初始化线程的所有方法

文章目录

  • C++笔记之初始化线程的所有方法
    • 一.非类中初始化线程
      • 1.使用函数指针初始化线程
      • 2.lambda表达式初始化线程
      • 3.使用成员函数初始化线程
      • 4.使用函数对象(Functor)初始化线程
      • 5.使用std::bind绑定函数及其参数初始化线程
    • 二.类中初始化线程去运行类成员函数
      • 1.在构造函数中使用成员函数初始化线程
      • 2.在构造函数中使用lambda表达式初始化线程
      • 3.在构造函数中使用函数对象(Functor)初始化线程
      • 4.使用std::bind绑定成员函数及其参数初始化线程
    • 三.类中初始化线程去运行全局函数
    • 四.上述程序的g++编译方法

一.非类中初始化线程

1.使用函数指针初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

void threadFunction() {
    std::cout << "Thread is running." << std::endl;
}

int main() {
    std::thread t(threadFunction);  // 使用函数指针初始化线程
    t.join();  // 等待线程结束
    return 0;
}

2.lambda表达式初始化线程

在这里插入图片描述

#include <iostream>
#include <thread>

void threadFunction() {
    std::cout << "Thread is running." << std::endl;
}

int main() {
    std::thread t([](){ std::cout << "Thread is running." << std::endl; });  // 使用lambda表达式初始化线程
    t.join();  // 等待线程结束
    return 0;
}

3.使用成员函数初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

class MyClass {
public:
    void threadFunction() {
        std::cout << "Thread is running." << std::endl;
    }
};

int main() {
    MyClass obj;
    std::thread t(&MyClass::threadFunction, &obj);  // 使用成员函数指针初始化线程
    t.join();  // 等待线程结束
    return 0;
}

4.使用函数对象(Functor)初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

class MyFunctor {
public:
    void operator()() {
        std::cout << "Thread is running." << std::endl;
    }
};

int main() {
    MyFunctor functor;
    std::thread t(functor);  // 使用函数对象初始化线程
    t.join();  // 等待线程结束
    return 0;
}

5.使用std::bind绑定函数及其参数初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>
#include <functional>

void threadFunction(int x, int y) {
    std::cout << "Thread is running. Sum: " << x + y << std::endl;
}

int main() {
    std::thread t(std::bind(threadFunction, 10, 20));  // 使用std::bind绑定函数及其参数初始化线程
    t.join();  // 等待线程结束
    return 0;
}

二.类中初始化线程去运行类成员函数

1.在构造函数中使用成员函数初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

class MyClass {
public:
    MyClass() {
        thread_ = std::thread(&MyClass::threadFunction, this);
    }

    ~MyClass() {
        if (thread_.joinable()) {
            thread_.join();
        }
    }

    void threadFunction() {
        std::cout << "Thread is running." << std::endl;
    }

private:
    std::thread thread_;
};

int main() {
    MyClass obj;
    // 执行其他操作...
    return 0;
}

2.在构造函数中使用lambda表达式初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

class MyClass {
public:
    MyClass() {
        thread_ = std::thread([this]() { threadFunction(); });
    }

    ~MyClass() {
        if (thread_.joinable()) {
            thread_.join();
        }
    }

    void threadFunction() {
        std::cout << "Thread is running." << std::endl;
    }

private:
    std::thread thread_;
};

int main() {
    MyClass obj;
    // 执行其他操作...
    return 0;
}

3.在构造函数中使用函数对象(Functor)初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>

class MyFunctor {
public:
    void operator()() {
        std::cout << "Thread is running." << std::endl;
    }
};

class MyClass {
public:
    MyClass() {
        thread_ = std::thread(MyFunctor());
    }

    ~MyClass() {
        if (thread_.joinable()) {
            thread_.join();
        }
    }

private:
    std::thread thread_;
};

int main() {
    MyClass obj;
    // 执行其他操作...
    return 0;
}

4.使用std::bind绑定成员函数及其参数初始化线程

在这里插入图片描述

代码

#include <iostream>
#include <thread>
#include <functional>

class MyClass {
public:
    MyClass() {
        thread_ = std::thread(std::bind(&MyClass::threadFunction, this, 10, 20));
    }

    ~MyClass() {
        if (thread_.joinable()) {
            thread_.join();
        }
    }

    void threadFunction(int x, int y) {
        std::cout << "Thread is running. Sum: " << x + y << std::endl;
    }

private:
    std::thread thread_;
};

int main() {
    MyClass obj;
    // 执行其他操作...
    return 0;
}

三.类中初始化线程去运行全局函数

在这里插入图片描述

四.上述程序的g++编译方法

在这里插入图片描述

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

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

相关文章

滤波电容计算举例

例&#xff1a;输入电压220VAC&#xff0c;功率4W&#xff1b;要求输出电压波动不超过5%&#xff0c;试计算滤波电容容量。 解&#xff1a;&#xff08;1&#xff09;电容的储能公式为&#xff1a;Wc1/2CU^2 当电容充电到峰值电压&#xff08;即220x1.414310V&#xff09;时&am…

数仓的分层理论

一、简介 2021-4-25 11:04:16 数据仓库分层是数据仓库设计中非常重要的一个环节&#xff0c;一个好的分层设计可以极大地简化数据仓库的操作&#xff0c;提升使用体验。然需要注意的是&#xff0c;分层理论并不绝对&#xff0c;只是提供一种普适的指导思想和原则&#xff0c;…

[Spring Cloud]:Study Notes·壹

文章目录 摘要1 认识微服务1.1 单体架构与分布式架构1.2 分布式架构与微服务1.3 微服务架构 2 nacos2.1 什么是nacos2.2 nacos使用2.2.1 nacos使用逻辑2.2.2 启动下载好的nacos2.2.3 引入依赖2.2.4 各注册服务中配置nacos相关信息2.2.5 测试nacos注册成功 3 Ribbon负载均衡3.1 …

改进YOLO系列 | YOLOv5/v7 引入谷歌 Lion 优化器

论文地址:https://arxiv.org/pdf/2302.06675.pdf 代码地址:https://github.com/google/automl/tree/master/lion 我们提出了一种将算法发现作为程序搜索的方法,并将其应用于发现用于深度神经网络训练的优化算法。我们利用高效的搜索技术来探索一个无限且稀疏的程序空间。为了…

计算机视觉-语义分割: FCN DeepLab Unet

文章目录 1. 概要1.1 什么是语义分割1.2 语义分割作用1.3 全卷积网络1.4 反卷积1.5 上采样三种方式1.6 跳层结构 Skip Layer 2. FCN架构3. DeepLab-v13.1 改进点3.2 空洞卷积(Atrous/Dilated convolution) 4. U-Net参考 1. 概要 1.1 什么是语义分割 从像素水平上理解、识别图…

微信小程序——Echarts使用(保姆式教程)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

从入门到精通!MATLAB基础教程及常用工具箱介绍

文章目录 基础介绍MATLAB窗口介绍MATLAB基本语法变量和数组控制流语句函数的定义和调用绘图MATLAB常用工具箱统计工具箱&#xff08;Statistics Toolbox)控制系统工具箱&#xff08;Control System Toolbox&#xff09;信号处理工具箱&#xff08;Signal Processing Toolbox&am…

搭建TiDB负载均衡环境-HAproxy+KeepAlived实践

作者&#xff1a; 我是咖啡哥 原文来源&#xff1a; https://tidb.net/blog/8e8cca1d 前言 HAProxy 提供 TCP 协议下的负载均衡能力&#xff0c;TiDB 客户端通过连接 HAProxy 提供的浮动 IP 即可对数据进行操作&#xff0c;实现 TiDB Server 层的负载均衡。同时&#xff0c…

SOFA Weekly|SOFARPC 5.10.1 版本发布、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

pytorch搭建AlexNet网络实现花分类

pytorch搭建AlexNet网络实现花分类 一、AlexNet网络概述分析 二、数据集准备下载划分训练集和测试集 三、代码model.pytrain.pypredict.py 一、AlexNet网络 概述 使用Dropout的方式在网络正向传播过程中随机失活一部分神经元&#xff0c;以减少过拟合 分析 对其中的卷积层、…

SORT+yolov5多目标跟踪

SORT 是一种简单的在线实时多目标跟踪算法。要点为&#xff1a; &#xff08;1&#xff09;以 IoU 作为前后帧间目标关系度量指标&#xff1b; &#xff08;2&#xff09;利用卡尔曼滤波器预测当前位置&#xff1b; &#xff08;3&#xff09;通过匈牙利算法关联检测框到目标&a…

thingsboard安装使用教程

1、安装tb-postgres tb-postgres是ThingsBoard与PostgreSQL数据库的单实例。 拉取tb-postgres镜像 docker pull thingsboard/tb-postgres 创建tb-postgres容器 docker run -itd --name tb-postgres -p 9090:9090 -p 1883:1883 -p 5683:5683/udp -p 5685:5685/udp -p 5432:…

如何使用银行四要素API接口提高用户身份认证的安全性

银行四要素是指银行在开户、转账等行为中对客户身份的核实&#xff0c;包括姓名、身份证号、银行卡号和手机号码。为了满足客户实名认证的需求&#xff0c;我们开发了相应的API接口&#xff0c;方便第三方开发人员进行身份核实的操作。 API接口名称&#xff1a;银行四要素验证…

Grafana图表配置快速入门

1、Grafana图表配置快速入门 前面我们使用 Prometheus Grafana 实现了一个简单的 CPU 使用率变化图&#xff0c;但是这个图还有许多缺陷&#xff0c;例如&#xff1a; 左边栏的数值太小了无法调整&#xff0c;下面的图标信息无法定制化等等。 其实 Grafana 的功能是非常强大…

平面电磁波的反射与折射,极化滤波作用

目录 引言 反射定律和折射定律 反射系数和折射系数 平面电磁波在理想介质分界面上的全反射和全折射 全反射 全折射 极化滤波作用 平面电磁波在良导体上的反射与折射 引言 再复杂的电磁波我们都可以看作是很多平面电磁波的叠加 我们在前面介绍的时候&#xff0c;我们认…

【Android】使用Epoxy 注解处理器,自动生成大量的 Model 类,简化复杂的 RecyclerView 开发流程

Epoxy 是一个 Android 库&#xff0c;它可以帮助开发者更轻松地构建复杂的 RecyclerView。其中&#xff0c;ImageButtonModel_ 是 Epoxy 自动生成的一个 Model 类&#xff0c;用于表示一个带有图像的按钮。 下面是使用注解器自动生成代码截图&#xff1a; ImageButtonModel_…

《C++ Primer》--学习2

字符串&#xff0c;向量和数组 标准库类型 string 直接拷贝和拷贝初始化 如果使用等号&#xff08;&#xff09;初始化一个变量&#xff0c;实际上执行的是拷贝初始化&#xff0c;编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用等号&#xff0c;则执行的是直接…

css定位装饰

目录 1、垂直对齐方式 2、光标类型 3、边框圆角 4、overflow溢出部分显示效果 5、元素本身隐藏 6、案例 元素整体透明度 1、垂直对齐方式 浏览器在处理行内标签和行内块标签时&#xff0c;默认按照文字去解析。 浏览器文字类型元素排版中存在用于对齐的基线。 图片和文…

Spring Security --- Thymeleaf 中 Spring Security 的使用

目录 初步 获取属性 权限判断 初步 Spring Security可以在一些视图技术中进行控制显示效果例如&#xff1a;JSP或Thymeleaf在非前后端分离且使用Spring Boot的项目中多使用Thymeleaf作为视图展示技术Thymeleaf对Spring Security的支持都放在thymeleaf-extras-springsecurity…

gma 2.0.0a2 (2023.06.17) 更新日志

从本版本开始&#xff0c;gma 1.x 不再维护。一方面是由于精力和时间有限&#xff0c;另一方面由于 gma 2.x 与 1.x 相差巨大&#xff0c;同时维护两个相差巨大的版本较困难。   本版本 &#xff08;gma 2.0.0a2&#xff09;依旧为预览版&#xff0c;但内容已趋于稳定&#x…