C++之C++11 thread线程示例(一百三十八)

这篇具有很好参考价值的文章主要介绍了C++之C++11 thread线程示例(一百三十八)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

C++之C++11 thread线程示例(一百三十八)

1.前言

本篇目的:介绍C++11 thread线程用法

2.C++11 thread创建传参线程

<1>. t1.join(): 主进程等待任务线程示例

#include <iostream>
#include <thread>
#include <unistd.h> 
using namespace std;

void task_01(){  
  printf("xxx------->%s(), line = %d\n",__FUNCTION__,__LINE__);  
} 

void task_02(int i){  
  printf("xxx------->%s(), line = %d\n",__FUNCTION__,__LINE__);  
  while(i < 1000)
    i++;
  printf("xxx------->%s(), line = %d, i = %d\n",__FUNCTION__,__LINE__,i);
}
int main(){
  int i = 0, j = 0;

  //1.任务线程不带参数
   thread t1(task_01);
   
  //2.任务线程带参数
  thread t2(task_02, i);
  //t1.detach();//线程与进程分离,各自执行,顺序是混换的.
  
  t1.join();//主进程等待线程执行结束,然后主进程开始执行.
  printf("xxx------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  return 0;
}

打印:
xxx------->task_01(), line = 7
xxx------->task_01(), line = 10, i = 1000
xxx------->main(), line = 20

在thread中创建一个任务线程task_01(),并将参数i = 1传进去; 然后 t1.join();
通过打印看出,主进程会等待线程执行完毕,才开始执行.

<2>. t1.detach(): 主进程和任务线程分离示例

#include <iostream>
#include <thread>
#include <unistd.h> 
using namespace std;
 
void task_01(int i){  
  printf("xxx------->%s(), line = %d\n",__FUNCTION__,__LINE__);  
  while(i < 1000)
    i++;
  printf("xxx------->%s(), line = %d, i = %d\n",__FUNCTION__,__LINE__,i);
}
int main(){
  int i = 0, j = 0;

  //1.任务线程.
  thread t1(task_01, i);
  t1.detach();//线程与进程分离,各自执行,顺序是混换的.
  
  //t1.join();//主进程等待线程执行结束,然后主进程开始执行.
  printf("xxx------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  return 0;
}

打印
xxx------->main(), line = 20

在thread中创建一个任务线程task_01(),并将参数i = 1传进去; 然后 t1.detach();
通过打印看出,主进程和任务线程各自执行,结果是主进程执行完了,任务线程没来的及执行;
也有可能,任务线程执行完了,主进程还没来得及执行,这种情况都有可能.文章来源地址https://www.toymoban.com/news/detail-414416.html

<3>.线程传递对象引用

#include<iostream>
#include<thread>
using namespace std;

class A {
public:
  int num;
  A(){};
};

void test(A& a) {
  a.num = 199;
  cout << "a.num = " << a.num << endl;
}

int main() {
  A a;
  a.num = 10;
  thread th(test, std::ref(a));

  th.join();
  cout << "a.num = " << a.num << endl;
  return 0;
}

<4>.线程传递指针对象

#include<iostream>
#include<thread>
using namespace std;

class A {
public:
  int num;
  A(){};
};

void test(A* a) {
  a->num = 199;
  cout << "a.num = " << a->num << endl;
}

int main() {
  A *a = new A();
  a->num = 10;
  //thread th(test, std::ref(a));
  thread th(test, a);

  th.join();
  cout << "a.num = " << a->num << endl;
  return 0;
}

<5>.线程传递this指针

#include<iostream>
#include<thread>
using namespace std;

class A {
public:
  int num;
  A(){};
  void print();
};


void test(A* a) {
  a->num = 199;
  cout << "a.num = " << a->num << endl;
}

void A::print(){
  thread th(test, this);
  th.join();
  cout << "a.num = " << this->num << endl;
}

int main() {
  A *a = new A();
  a->num = 10;
  a->print();

  return 0;
}

<6>.thread线程lambda表达式用法

/***********************************************************
* Author        : 公众号: Android系统攻城狮
* Create time   : 2023-07-28 22:06:42 星期五
* Filename      : thread_lambda_05.cpp
* Description   :
************************************************************/

#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
#include <mutex>
#include <thread>
int main(){
  std::mutex mutex;
  std::thread thread = std::thread([&]() {
    std::lock_guard<decltype(mutex)> lock(mutex);
    for (int i=10; i>0; --i) {
      std::cout << i << std::endl;
      std::this_thread::sleep_for (std::chrono::seconds(1));
    }
  });
  thread.join();
  return 0;
}

到了这里,关于C++之C++11 thread线程示例(一百三十八)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PCL点云处理之pcd文件的读写(详细注释版)(一百三十三)

    `处理点云数据的第一步总是把点云从不同格式的文件读取到自己的程序里, 存储点云信息的文件包括但不限于pcd,las,ply,txt等等,由于我们用的是PCL库进行点云处理,所以最适合的还是pcd格式的点云文件,所以有必要学习如何从pcd文件中读取点云的信息:如坐标等,以及如何

    2023年04月18日
    浏览(46)
  • C/C++基础讲解(一百三十一)之经典篇(信息合并/平均分数存储)

    很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中的奥秘,真的要花费一些功夫,我和大家一样都是这么啃过来的,从不知到知知,懵懂到入门,每一步都走的很艰辛,课程上,大学老师基本上讲解上机实操得时间特别有

    2024年02月07日
    浏览(31)
  • 架构设计内容分享(一百三十三):ES+Redis+MySQL高可用,如何试实现?

    目录 背景: ES 高可用方案: ES 双中心主备集群架构 ES 流量隔离三集群架构 ES 集群深度优化提升 会员 Redis 缓存方案: ES 近一秒延时导致的 Redis 缓存数据不一致问题的解决方案 Redis 双中心多集群架构 高可用会员主库方案: MySQL 双中心 Partition 集群方案 会员主库平滑迁移方

    2024年02月22日
    浏览(37)
  • Linux图形管理框架gdm3、lightdm、sddm、kdm介绍(一百三十七)

    1.Gnome系列图形管理器:gdm、gdm3 Ubuntu默认界面管理器:gdm3 2.KDE系列图形管理器:KDM,SDDM LUbuntu默认界面管理器:sddm 3.Canonical公司系列图形管理器:Lightdm XUbuntu默认界面管理器:lightdm 查看当前使用的显示管理器 

    2024年02月12日
    浏览(27)
  • 一百三十三、Hive——Hive外部表加载含有JSON格式字段的CSV文件数据

    在Hive的ODS层建外部表,然后加载HDFS中的CSV文件数据 注意 :CSV文件中含有未解析的JSON格式的字段数据,并且JSON字段中还有逗号 JSON数据的字段track_data只显示一部分数据,因为JSON格式数据里面也含有逗号 [{\\\"id\\\":\\\"14\\\",\\\"length\\\":5.0,\\\"height\\\":3.0,\\\"posX\\\":63.0,\\\"posY\\\":37.0,\\\"acs\\\":99.0,\\\"angle\\\":83.0,\\\"alti

    2024年02月16日
    浏览(31)
  • 【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]

    当讨论现代编程语言的特性时,C++11无疑是一个不容忽视的里程碑。在前一篇文章中,我们深入探讨了Lambda表达式在C++11中的引入和应用。本文将继续探索C++11的强大功能,具体而言,我们这篇文章将聚焦于线程库和其中的thread类。 线程在多任务处理中起着至关重要的作用,它

    2024年02月04日
    浏览(28)
  • 【从零开始学习JAVA | 第三十八篇】应用多线程

    目录 前言: 多线程的实现方式: Thread常见的成员方法: 总结:            多线程的引入不仅仅是提高计算机处理能力的技术手段,更是适应当前时代对效率和性能要求的必然选择。在本文中,我们将深入探讨多线程的应用和实践,帮助读者更好地理解和应用多线程技术,

    2024年02月13日
    浏览(40)
  • C++11多线程—thread

      目录 1.thread类 2.线程函数参数 3.原子性操作库(atomic) 4.lock_guard与unique_lock 4.1mutex的种类 4.2lock_guard 4.3unique_lock 5.condition_variable         在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接 口,这使得代码的可移植性比较差。C++11中最重要

    2023年04月16日
    浏览(25)
  • 第二百三十二回 如何通过相机获取图片文件

    我们在上一章回中介绍了\\\"如何混合选择多个图片和视频文件\\\"相关的内容,本章回中将介绍 如何通过相机获取图片文件 .闲话休提,让我们一起Talk Flutter吧。 我们在前面章回中介绍的选择图片或者视频文件的方式都是通过文件窗口进行的,本章回中将介绍如何通过相机获取图

    2024年02月20日
    浏览(37)
  • 【C++】多线程(thread)使用详解

    多线程(multithreading),是指在软件或者硬件上实现多个线程并发执行的技术。具有多核CPU的支持的计算机能够真正在同一时间执行多个程序片段,进而提升程序的处理性能。在一个程序中,这些独立运行的程序片段被称为“ 线程 ”(Thread),利用其编程的概念就叫作“多线

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包