FFmpeg-chapter2-C++中的线程

1 常规的线程

一般常规的线程如下所示

// CMakeProject1.cpp: 定义应用程序的入口点。
//#include "CMakeProject1.h"
#include <thread>
using namespace std;void threadFunction(int index)
{for (int i = 0; i < 1000; i++){std::cout << "Thread: " << i << "--" << index << std::endl;}
}int main()
{// 创建线程std::thread t1(threadFunction, 10);std::thread t2(threadFunction, 20);// 线程的两种管理方式t1.join();					// 线程同步,主线程会等待线程 t 完成后继续运行//t.detach();				// 线程分离,线程 t 会独立运行,主线程不会等待它完成t2.join();system("pause");return 0;
}

这里使用的是VS207+CMake

除过加锁,这段代码在运行的时候容易出现资源共享的情况,改进一下,参看Java中的

2 新的尝试

新建文件夹和文件如图所示

修改最外面的cmakelist.txt

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)project ("CMakeProject1")# 包含子项目。
add_subdirectory ("CMakeProject1")
add_subdirectory ("MMThread")

MMThread工程下

MMThread.h

#pragma once// 定义一个类
class MMthread
{
public:virtual void run() = 0;		// 纯虚函数,线程会调用这个函数int start();				// 启动函数
};

MMThread.cpp

#include "MMThread.h"
#include <thread>int MMthread::start()
{std::thread t(&MMthread::run, this);			// 创建线程,调用自己的纯虚函数,子类继承父类会重新纯虚函数t.detach();										// 线程分类return 0;
}

里面的CMakeList.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)# 将源代码添加到此项目的可执行文件。
# 将.cpp/.c/.cc文件生成.a静态库
# 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可
# add_library(库文件名称 STATIC 文件)
add_library(MMThread MMThread.cpp)# TODO: 如有需要,请添加测试并安装目标。

接着修改CmakeProject1工程(图片叫MMPlayer),这个项目要用到前面项目的库,因此,要在当前目录的上一级开始查找;同时还要将用到的库链接进来

CMakeList.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)# 从上一级开始查找
include_directories(../)# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject1 "CMakeProject1.cpp" "CMakeProject1.h")# TODO: 如有需要,请添加测试并安装目标。# 对add_library或add_executable生成的文件进行链接操作
# 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可
# target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称)
target_link_libraries(CMakeProject1 MMThread)

CmakeProject1.cpp(上图中的MMPlayer.cpp)

// CMakeProject1.cpp: 定义应用程序的入口点。
//#include "CMakeProject1.h"
#include <MMThread/MMThread.h>
#include <chrono>
#include <thread>
using namespace std;class MyMMThread : public MMthread
{
public:// 构造函数MyMMThread(int _a) : a(_a) {}// 实现父类的纯虚函数void run() override{std::cout << "MyMMthread: " << a << std::endl;}private:int a;
};int main()
{MyMMThread myThread1(10);			// 创建线程// 会调用父类的start函数,父类的start函数创建线程,调用纯虚函数,子类实现了纯虚函数,因此会打印myThread1.start();MyMMThread myThread2(20);			// 创建线程myThread2.start();// 休眠2sstd::this_thread::sleep_for(chrono::seconds(2));system("pause");return 0;
}

测试

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【华三】从零开始掌握SR技术:原理、架构与应用全解析

【华三】从零开始掌握SR技术&#xff1a;原理、架构与应用全解析 一、初识SR&#xff1a;路由技术的新革命1.1 传统网络的困扰&#xff1a;从真实案例看技术瓶颈1.1.1 企业网络运维之痛问题2&#xff1a;流量工程实现困难问题3&#xff1a;网络智能化缺失 1.2 SR的诞生意义&…

CogBlobTool工具

CogBlobTool是一款专用于图像斑点检测于分析的 工具&#xff0c;通过灰度值阈值分割和特征过滤&#xff0c;帮助在复杂背景中提取目标区域&#xff0c;并计算几何属性。 效果图 注意&#xff1a;在这里只有一张图像可以不使用模板匹配工具 CogBlobTool工具的功能 斑点检测于…

大模型应用案例 | 大模型+金融运维,擎创携手某证券创新运维能力新范式

一、当大模型遇上金融运维&#xff1a;一场让告警处理“脱胎换骨”的变革 2022年底&#xff0c;ChatGPT的横空出世让AI技术彻底出圈&#xff1b;短短两年后&#xff0c;大模型已悄然潜入金融行业的“心脏地带”——运维系统。面对指数级暴增的告警信息、碎片化的处理流程&#…

Linux三种网络方式

前言 发现运维啥都得会&#xff0c;这周就遇到了网络问题自己无法解决&#xff0c;因此痛定思痛学一下。 参考文献 你管这破玩意叫网络&#xff1f; 桥接模式、NAT模式、仅主机模式&#xff0c;原来是这样工作的 交换机 构成局域网&#xff0c;实现所有设备之间的通信。 …

基于PHP和MySQL的用户登录注册系统实现

系统架构 系统采用前后端分离的架构&#xff0c;使用PHP作为后端语言&#xff0c;MySQL作为数据库。以下是系统的整体架构图&#xff1a; 这个架构图展示了系统的三个主要层次&#xff1a; 前端界面层&#xff1a;包含用户交互的三个页面&#xff08;注册、登录和欢迎页面&am…

脚本无法获取响应主体(原因:CORS Missing Allow Credentials)

背景&#xff1a; 前端的端口号8080&#xff0c;后端8000。需在前端向后端传一个参数&#xff0c;让后端访问数据库去检测此参数是否出现过。涉及跨域请求&#xff0c;一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码&#xff0c;出现了这个bug&#xff0…

【计网】计算机网络概述

第一章 计算机网络概述 1.2 因特网概述1.2.1 网络、互联网和因特网1.2.2 因特网发展的三个阶段1.2.3 因特网的标准化工作1.2.4 因特网的组成 1.3 三种交换方式1.3.1 电路交换1.3.2 分组交换1.3.3 报文交换1.3.4 三种交换的对比 1.4 计网的定义与分类1.4.1 定义1.4.2 分类 1.5 计…

前端依赖nrm镜像管理工具

npm 默认镜像 &#xff1a;https://registry.npmjs.org/ 1、安装 nrm npm install nrm --global2、查看镜像源列表 nrm ls3、测试当前环境下&#xff0c;哪个镜像源速度最快。 nrm test4、 切换镜像源 npm config get registry # 查看当前镜像源 nrm use taobao # 等价于 npm…

LinkedList与链表

目录 1、链表 2、实现自己的链表 (不带头结点) 2.1、遍历链表 2.2、求链表长度 2.3、判断链表是否包含关键字 2.4、插入节点 2.5、任意位置插入一个节点 2.6、删除一个节点 2.7、删除所有值为key的节点 2.8、清空所有节点 1、链表 链表是一种物理结构上不连续的存储结…

StableDiffusion打包 项目迁移 项目分发 1

文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新&#xff1a;https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序&#xff1a; python3.10.6: https://www.python.org/downloads/release/python-3106/gi…

架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例&#xff0c;分别探讨 一个初…

Xshell客户端免费版无需注册Linux连接客户端8.0详细安装教程(2025年最全最详细的图文教程)附安装包

目录 关联链接 前言 一、下载安装程序 二、安装Xshell客户端 1.启动安装 2.下一步 3.许可协议 4.安装目录 5.开始安装 6.安装完成 7.免费许可 8.大功告成&#xff01; 关联链接 Xftp免费客户端安装教程&#xff1a;https://blog.csdn.net/xiaoguo1001/article/detai…

electron多进程通信

进程间通信 | Electron 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责&#xff0c;因此 IPC 是执行许多常见任务的唯一方法&#xff0c;例如从 UI 调用原生 API 或从原生菜单触发…

登录日志管理:通用分页和排序封装、 查询登录日志列表、删除登录日志、清空登录日志、解锁用户登录状态(解锁密码错误次数超限)

文章目录 引言I 登录日志管理接口列表II 通用分页和排序封装Java 分页和排序封装vue前端排序页面III 工具类字段名转换 : 驼峰转下划线命名引言 I 登录日志管理 接口列表 import request from @/utils/request// 查询登录日志列表 export function list(query) {return

基于MATLAB红外弱小目标检测MPCM算法复现

摘要&#xff1a;本文详细介绍了一种基于人类视觉系统特性的红外弱小目标检测算法——Multiscale patch-based contrast measure (MPCM)。该算法通过增强目标与背景的对比度&#xff0c;有效检测红外图像中的弱小目标&#xff0c;并在MATLAB环境中进行了复现与实验验证。 关键…

Flutter系列教程之(8)——CheckBox多选框及动态更改多选框

目录 1.星级组件使用 2.多选框使用及数据更改 3.完整源码 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同的星级显示不同的多选框数据,加上之前也没有使用过CheckBox,今天便是一起讲吧 1.星级组件使用 首先,我们有使用到星级评分组件 在p…

神经网络|(十一)|神经元和神经网络

【1】引言 前序已经了解了基本的神经元知识&#xff0c;相关文章链接为&#xff1a; 神经网络|(一)加权平均法&#xff0c;感知机和神经元-CSDN博客 神经网络|(二)sigmoid神经元函数_sigmoid函数绘制-CSDN博客 神经网络|(三)线性回归基础知识-CSDN博客 把不同的神经元通过…

微软Office 2016-2024 x86直装版 v16.0.18324 32位

微软 Office 是一款由微软公司开发的办公软件套装&#xff0c;能满足各种办公需求。包含 Word、Excel、PowerPoint、Outlook 和 OneNote 等软件。Word 有强大文档编辑功能和多人协作&#xff1b;Excel 可处理分析大量数据及支持宏编程&#xff1b;PowerPoint 用于制作演示文稿且…

Python从0到100(八十九):Resnet、LSTM、Shufflenet、CNN四种网络分析及对比

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过&#xff0c;大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化&#xff0c;我们很高兴地宣布&#xff1a;TinyEngine v2.2版本正式发布&#xff01;本次更新带来了重要的功能增强------页面支持嵌套路由&#…