用类对象(可调用对象)创建线程的手法(学习)

2023-05-16

其他创建线程的手法:
用类对象(可调用对象),就会执行operator这个函数。

这样的程序每次执行结果都不一样。
//线程中使用了主线程的局不变量,主线程执行结束后,i内存被回收。子线程还在使用i的引用,会出现不可知的情况。
一旦调用detach(),主线程的TA对象还在吗?
答:这个对象不在了,但是没有关系,因为这个对象是被复制到了子线程中去。
执行完主线程ta会被销毁,但是复制的对象依旧存在。
所以,只要子线程中没引用或者指针,那么就不会出什么问题。

class TA
{
public:
    void operator()()
    {
        cout<<"我的线程开始执行了"<<endl;
        cout<<"我的线程结束了"<<endl;
    }

};

int main()
{
   TA ta;
   thraed my_th(ta);//可调用对象
   my_th.join();
   
   cout<<"I LOve CHNIA"<<endl;
   return 0;

}


-------------------------------------------------


class TA
{
public:
    TA(int i):m_i(i){
        cout<<"TA构造函数执行"<<endl;
    }
    TA(const TA ta):m_i(ta.m_i)
    {
        cout<<"拷贝构造函数执行"<<endl;    
    }
    
    ~TA()
    {
        cout<<"TA析构函数执行"<<endl;
    }
    void operator()()
    {
        cout<<"m_i:"<<m_i<<endl;
        cout<<"m_i:"<<m_i<<endl;
        cout<<"m_i:"<<m_i<<endl;
        cout<<"m_i:"<<m_i<<endl;
    }
    int m_i;

};

int main()
{
   int i=6;
   TA ta(i);
   thraed my_th(ta);//可调用对象,拷贝了
   my_th.detach();
   
   cout<<"I LOve CHNIA"<<endl;
   return 0;

}


使用:lambda表达式创建线程

int main()
{
    auto mylambda = []
    {
    cout<<"我的线程开始执行了"<<endl;
    
    
    
    cout<<"我的线程结束了"<<endl;

    };
    thread myth(mylambda);
     myth.jion();
    cout<<"I LOve CHNIA"<<endl;
    return ;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用类对象(可调用对象)创建线程的手法(学习) 的相关文章

  • Python爬虫——BeautifulSoup的基本使用

    Python爬虫 BeautifulSoup的基本使用 安装beautifulsoup4模块 pip span class token function install span beautifulsoup4 1 创建BeautifulSo
  • ubuntu下安装高版本clang-format

    问题 ubuntu 16 04版本没有clang format 9以上版本源 但较低版本的工具对一些格式化配置符号不支持 使用deb文件安装高版本的话要更新的依赖太多 系统依赖 xff0c 诸如libs libstsc 43 43 等 解决
  • ST-LINK 连接图

    stm32 JTAG 管脚 ST LINK V2 JTAG 管脚 JTAG 连接模式 TVCC xff08 1 xff09 STM32 3 3V xff1b 必须连接 ST LINK根据此调整输出电平 TRST xff08 3 xff09
  • 如何给金溢RSU配路网

    如何给RSU配路网 一 路网数据采集 xff1a 利用车载单元OBU的GPS定位模块在特定的路段 xff0c 选取两个点 xff0c 一个设定为起点 xff0c 一个终点 xff08 一般大概300 400米左右 xff09 中间不能有实体
  • Linux之read命令使用

    read命令 xff1a read 命令从标准输入中读取一行 xff0c 并把输入行的每个字段的值指定给 shell 变量 1 xff09 read后面的变量var可以只有一个 xff0c 也可以有多个 xff0c 这时如果输入多个数据 x
  • shell脚本中 “set -e” 的作用

    bin bash set e command 1 command 2 exit 0 你写的每个脚本都应该在文件开头加上set e 这句语句告诉bash如果任何语句的执行结果不是true则应该退出 这样的好处是防止错误像滚雪球般变大导致一个致
  • strcpy的使用

    include lt iostream gt include lt string h gt using namespace std int main char data 61 34 dhewdwehkfew qwdhqwhdj qwhdwq
  • 算法复杂度时间的体现举例

    1 1 1 1 1 1 n 这个样的数列相加 xff0c 不同的算法的复杂度对比 可以学习时间怎么用 include lt iostream gt include lt cmath gt include lt ctime gt using
  • RS232 串口通信接口和代码实现红绿灯控制

    1 东西方向红灯 xff1b 2 东西方向黄灯 xff1b 3 东西方向绿灯 xff1b 4 避开发送 0x0A的底层却发送0x0D 0x0A问题 5 南北方向红灯 xff1b 6 南北方向黄灯 xff1b 7 南北方向绿灯 https b
  • apache中Options Indexes FollowSymLinks详解

    Indexes 显示一个目录下面的文件夹和文件 要禁止 Apache 显示目录结构列表 xff0c 只需将 Option 中的 Indexes 去掉即可 在Options Indexes FollowSymLinks在Indexes前面加上
  • 卸载 vmware-tools.pl和安装 vmware-tools.pl失败了,谁能解?

    v2x 64 ubuntu Desktop vmware tools distrib ls bin caf doc etc FILES INSTALL installer lib vgauth vmware install pl v2x 6
  • shell脚本$0 $1 $2 $* $@ $# 变量学习记录

    bin bash this program is use 0 and so on echo 34 THe script name is 61 61 gt 0 34 echo 34 The total parameter number is
  • c++ 11/14新特性

    C 43 43 11 新增特性 1 自动类型推导 61 61 61 61 gt auto int main1 auto a 61 10 a 是 int 类型 auto d 61 1 2 d 是 double 类型 auto f 61 2 3
  • 数据结构常见问题和概念

    1 数组和链表的区别 从逻辑结构上来看 xff0c 数组必须实现定于固定的长度 xff0c 不能适应数据动态增减的情况 xff0c 即数组的大小一旦定义就不能改变 当数据增加是 xff0c 可能超过原先定义的元素的个数 xff1b 当数据减
  • 常量指针与指针常量,函数指针与指针函数

    1 常量指针 xff1a 本质是一个指针 xff0c 表示一个指向常量的指针 const int p 能够改变指针的指向 xff0c 但不能改变指针所指对象的值 int a 61 0 b 61 1 const int p 61 amp a
  • GDB调试入门----编程珠玑

    GDB是GUN发布的一款功能强大的程序调试工具 GDB主要完成下面三个方面的功能 xff1a 1 启动被调试程序 2 让被调试程序在指定的位置停住 3 当程序被停住时 xff0c 可以检查程序状态 xff08 变量值等 xff09 总览 本
  • AMD面试小结

    关于git如何使用 关于GDB调试如何使用 关于多线程编程 关于用户态和内核态 xff1f 关于openGL 关于voiltale你用过没 xff1f volatile表示对象的值可能在程序的控制或检测之外被改变 xff0c 并告诉编译器不
  • UClode 互联网公司面试

    面试的岗位是sql内核开发 1 写一个1 2 3 4 5数字做全排列的输出程序 思想是如果只有两个数字那么只有两种排列1 2和2 1 先固定一个数 xff0c 后面就是4个数做全排列 xff0c 要是把4个数的第一个数固定 xff0c 就是
  • 刷题c++ 思考

    1 有一个vector数组 xff0c 要从中去掉一个数 xff0c 使的这个数组中的数的连乘积最大 xff0c 返回这个数的下标 xff08 数组中可能有正数 xff0c 负数 xff0c 0 xff09 int getMax xff08
  • ubuntu 20.04环境下ROS+PX4+RPG ROS DVS+DV-gui 安装

    ROS安装 使用鱼香ros的一键安装指令 xff1a wget http fishros com install O fishros amp amp fishros 分别选择 xff1a 1 会同时完成换源和安装 3 作用如图所示 4 如上

随机推荐