当前位置: 首页 > news >正文

WebRTC线程的启动与运行

在这里插入图片描述

WebRTC线程运行的基本逻辑:

while(true)
{Get(&msg,);Dispatch(&msg);}Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);}

在执行函数内部,就是一个while死循环,只做两件事,从队列里Get取出消息,然后调用Dispatch处理消息。
在Dispatch函数中会调用入参*pmsg消息的handler的OnMessage处理消息,
具体如何处理消息,每一个pmsg内部有不同的逻辑,
就是把控制权交给的发送线程,发送线程在执行时它是知道需要做什么事的,但是这个事情需要交给其他的线程来做,
但是执行线程是不知道发送线程要执行怎样的逻辑,那么最好的方法就是发送线程将执行的逻辑写好,执行线程只要按照发送线程的要求去执行任务就OK了。

【编程思想】

因此,要弄明白正在处理的业务逻辑,必须要从发送线程着手,而不是工作线程,因为工作线程并不清楚它在做什么。

WebRTC中的具体代码实现:

// src/rtc_base/thread.cc
Thread::Start() {pthread_ = pthread_create(PreRun);
}Thread::PreRun() {Thread *thread = static_cast<>();ThreadManager::Instance()->SetCurrentThread(thread); // 将本线程设置到ThreadManager中,与Thread对象进行绑定,这也说明绑定的时机是在pthread创建成功之后thread->Run();
}Thread::Run() {ProcessMessages(kForever);
}Thread::ProcessMessages() {while(true) {Get(&msg);Dispatch(&msg);}
}Thread::Dispatch(Message *pmsg) {pmsg->handler->OnMessage(pmsg);
}

相关文章:

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑&#xff1a; while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部&#xff0c;就是一个while死循环&#xff0c;只做两件事&#xff0c;从队列里Get取…...

Day3 微服务 微服务保护(请求限流、线程隔离、服务熔断)、Sentinel微服务保护框架、分布式事务(XA模式、AT模式)、Seata分布式事务框架

目录 1.微服务保护 1.1.服务保护方案 1.1.1 请求限流 1.1.2 线程隔离 1.1.3 服务熔断 1.2 Sentinel 1.2.1.介绍和安装 1.2.2 微服务整合 1.2.2.1 引入sentinel依赖 1.2.2.2 配置控制台 1.2.2.3 访问cart-service的任意端点 1.3 请求限流 1.4 线程隔离 1.4.1 OpenFeign整合Senti…...

第9章 子程序与函数调用

汇编语言是一种低级编程语言&#xff0c;它几乎是一对一地映射到计算机的机器码指令。在汇编语言中实现循环结构通常涉及到使用条件跳转指令&#xff08;如 JMP、JE、JNE 等&#xff09;来控制程序流程。下面我将通过一个简单的例子来讲解如何用x86汇编语言实现一个循环结构。 …...

manacher算法

Manacher 算法快速入门 Manacher 算法是一种用于寻找字符串中最长回文子串的高效算法&#xff0c;时间复杂度为 O(n)。 基本概念 回文 回文是一个字符串&#xff0c;从左到右和从右到左读都一样。 示例&#xff1a; 回文&#xff1a;"aba"、"abba"非回…...

Cocos2dx Lua绑定生成中间文件时参数类型与源码类型不匹配

这两天维护的一个项目&#xff0c;使用arm64-v8a指令集编译时遇到了报错&#xff0c;提示类型不匹配&#xff0c;具体报错的代码【脚本根据C源文件生成的中间文件】如下&#xff1a; const google::protobuf::RepeatedField<unsigned long long>& ret cobj->equi…...

为什么需要 std::call_once?

std::call_once 是 C 标准库中的一个函数&#xff0c;用来确保某个操作仅被执行一次&#xff0c;通常用于线程安全的初始化操作。它常与 std::once_flag 结合使用&#xff0c;后者用于标记某个操作是否已经执行过。 为什么需要 std::call_once&#xff1f; 在多线程程序中&am…...

ubuntu非root用户操作root权限问题-virbox挂在共享文件夹

首先讲一下&#xff0c;virtuallbox 挂在文件夹&#xff0c;操作的时候总是需要root权限&#xff0c;比较费劲。 这一操作其实也正对着我们在Ubuntu上的操作。 前段时间我想在ubuntu正常用户下去操作i2c&#xff0c;也出现了类似的问题。 后来把正常的操作加到组里面也解决了类…...

网络通讯协议

层次协议应用层HTTP, HTTPS, FTP, SMTP, POP3, IMAP, DNS, DHCP, SNMP, Telnet, SSH, SIP, RTP, RTCP, TFTP, NTP, ICMP, IGMP传输层TCP, UDP网络层IP, ICMP, IGMP数据链路层Ethernet, PPP, HDLC, ATM, Frame Relay ISO/OSI 参考模型协议应用层HTTP, HTTPS, FTP, SMTP, POP3, …...

centos,789使用mamba快速安装devtools

如何进入R语言运行环境请参考&#xff1a;Centos7_miniconda_devtools安装_R语言入门之R包的安装_r语言devtools包怎么安装-CSDN博客 在R里面使用安装devtools经常遇到依赖问题&#xff0c;排除过程过于费时&#xff0c;使用conda安装包等待时间长等。下面演示centos,789都是一…...

【人工智能机器学习基础篇】——深入详解强化学习之常用算法Q-Learning与策略梯度,掌握智能体与环境的交互机制

深入详解强化学习之常用算法&#xff1a;Q-Learning与策略梯度 强化学习&#xff08;Reinforcement Learning, RL&#xff09;作为机器学习的一个重要分支&#xff0c;近年来在多个领域取得了显著成果。从棋类游戏的人机对战到自主驾驶汽车&#xff0c;强化学习技术展示了其强大…...

银河麒麟桌面v10sp1修复引导笔记

1.安装双系统最好备份esp分区&#xff0c;uefi引导丢失可以用diskgen,选择工具再点击设置uefi bios&#xff0c;鼠标右键选择efi文件。 2.银河麒麟界面添加windows&#xff0c;复制EFI/Microsoft或者pe生成引导文件后&#xff0c;修复Windows引导用下面命令 /桌面# update-gru…...

深入理解 MVCC 与 BufferPool 缓存机制

深入理解 MVCC 与 BufferPool 缓存机制 在 MySQL 数据库中&#xff0c;MVCC&#xff08;Multi-Version Concurrency Control&#xff09;多版本并发控制机制和 BufferPool 缓存机制是非常重要的概念&#xff0c;它们对于保证数据的一致性、并发性以及提升数据库性能起着关键作用…...

vue实现下拉多选、可搜索、全选功能

最后的效果就是树形的下拉多选&#xff0c;可选择任意一级选项&#xff0c;下拉框中有一个按钮可以实现全选&#xff0c;也支持搜索功能。 在mounted生命周期里面获取全部部门的数据&#xff0c;handleTree是讲接口返回的数据整理成树形结构&#xff0c;可以自行解决 <div c…...

探秘Kafka源码:关键内容解析

文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA&#xff0c;点击 File->Open…->源码包解…...

Android音频效果处理:基于`android.media.audiofx`包的原理、架构与实现

Android音频效果处理:基于android.media.audiofx包的原理、架构与实现 目录 引言Android音频框架概述android.media.audiofx包简介音频效果处理的原理 4.1 音频信号处理基础4.2 常见音频效果android.media.audiofx的架构设计 5.1 类结构分析5.2 设计模式应用系统定制与扩展 6…...

LeetCode - 初级算法 数组(两个数组的交集 II)

两个数组的交集 II 这篇文章讨论如何求两个数组的交集,并返回结果中每个元素出现的次数与其在两个数组中都出现的次数一致。提供多个实现方法以满足不同场景需求。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定两个整数数组 nums1 和 nums2,以数…...

SQL 实战:分页查询的多种方式对比与优化

在处理大数据表时&#xff0c;分页查询是非常常见的需求。分页不仅可以提高用户体验&#xff0c;还能有效减少数据库查询返回的数据量&#xff0c;避免一次性加载大量记录引起的性能瓶颈。 然而&#xff0c;在数据量较大或复杂查询中&#xff0c;简单的分页方式可能导致性能下降…...

汇川Easy系列正弦信号发生器(ST源代码)

正弦余弦信号发生器CODESYS和MATLAB实现请参考下面文章链接: 正弦余弦信号发生器应用(CODESYS ST源代码+MATLAB仿真)_st语言根据输入值,形成正弦点-CSDN博客文章浏览阅读410次。本文介绍了如何在CODESYS编程环境中创建正弦和余弦信号发生器。通过详细的PLC梯形图和SCL语言代码…...

JavaSpring AI与阿里云通义大模型的集成使用Java Data Science Library(JDSL)进行数据处理

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…...

Three.js教程002:Three.js结合Vue进行开发

文章目录 Three.js结合Vue开发创建Vue项目安装依赖运行项目安装three使用three.js完整代码下载Three.js结合Vue开发 创建Vue项目 创建命令: npm init vite@latest框架这里选择【Vue】: 安装依赖 安装命令: cd 01-vueapp npm install运行项目 npm run dev...

pycharm+anaconda创建项目

pycharmanaconda创建项目 安装&#xff1a; Windows下PythonPyCharm的安装步骤及PyCharm的使用-CSDN博客 详细Anaconda安装配置环境创建教程-CSDN博客 创建项目&#xff1a; 开始尝试新建一个项目吧&#xff01; 选择好项目建设的文件夹 我的项目命名为&#xff1a;pyth…...

vue2中遇到的问题与解决方案(自用)

1 、在vue2中怎么能成功渲染字符串中存在自定义组件 比如&#xff0c;前端样式定义后由接口返回想渲染的样式&#xff0c;如果此时直接使用v-html&#xff0c;那么vue的自定义组件或者ui框架的组件是会被直接引用不能编译成功 解决方案&#xff1a; 此时想到vue官网使用render函…...

CF2043b-B. Digits

题目链接 题意&#xff1a;给定两个整数n、d&#xff0c;要求找出排列成n!个d之后的数可以被1-9中奇数整除的数 题解&#xff1a; 主要是考察分类讨论&#xff1a; 被3整除&#xff0c;当d能被3整除时一定成立或者n > 3&#xff0c;当n > 3时n!一定包含因数3 被5整除&a…...

ultralytics库RT-DETR代码解析

最近读了maskformer以及maskdino的分割头设计,于是想在RT-DETR上做一个分割的改动,所以选择在ultralytics库中对RTDETR进行改进。 本文内容简介: 1.ultralytics库中RT-DETR模型解析 2. 对ultralytics库中的RT-DETR模型增加分割头做实例分割 1.ultralytics库中RT-DETR模型解…...

(七)- plane/crtc/encoder/connector objects

1&#xff0c;framebuffer/plane Rockchip RK3399 - DRM framebuffer、plane基础知识 - 大奥特曼打小怪兽 - 博客园 2&#xff0c;crtc Rockchip RK3399 - DRM crtc基础知识 - 大奥特曼打小怪兽 - 博客园 3&#xff0c;encoder/connector/bridge Rockchip RK3399 - DRM en…...

基于STM32的四轴飞行器的控制系统(论文+源码)

1.系统设计 本次基于stm32单片机的四轴飞行器控制系统主要包括硬件和软件这两大部分&#xff0c;其中硬件部分是基于单片机的四轴飞行器控制系统实现的基石&#xff0c;其中主要STM32单片机负责整个系统功能的实现&#xff1b;NRF24L01无线模块负责对四轴飞行器的远程控制&…...

混合精度训练(Mixed Precision Training)中为什么在训练过程中不直接使用bf16进行权重更新?中英双语

中文版 为什么在训练过程中不直接使用 bf16 进行权重更新&#xff1f; 在深度学习的训练过程中&#xff0c;我们通常使用 混合精度训练&#xff08;Mixed Precision Training&#xff09;来提高训练效率&#xff0c;减少内存占用。虽然 bf16&#xff08;Brain Floating Point…...

【java】HashMap的实现原理

目录 1. 说明2. 哈希函数3. 桶数组4. 哈希冲突解决5. 动态扩容6. 查找、插入和删除操作 1. 说明 1.HashMap是一个基于哈希表的数据结构&#xff0c;它实现了Map接口。2.HashMap允许使用null键和null值&#xff0c;并且不保证映射的顺序。 2. 哈希函数 1.HashMap使用哈希函数…...

FCM32F103C8T6开发指引

打了块板&#xff0c;没有STM芯片了&#xff0c;于是&#xff0c;换了块FCM32F103C8T6.原来的工程直接编译&#xff0c;不能仿真&#xff0c;提示M3,M4核不兼容&#xff0c;但是&#xff0c;用jflash是可以直接把bin文件烧录进去的&#xff0c;也可以正常运行起来。 但为了方便…...

Python世界:人生苦短,我用Python

Python世界&#xff1a;人生苦短&#xff0c;我用Python 前言Python优势Python缺点 前言 几句话说清&#xff0c;我们为啥要用Python&#xff1f; Python设计之初心&#xff0c;是为了解决编程门槛&#xff0c;让大家更聚焦业务实现&#xff0c;而非编程细节。当前人工智能火…...