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);
}

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

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

相关文章

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合&#xff0c;可以在有限的标签下实现一些 CSS 图形绘制效果&#xff0c;我这里举两个小例子&#xff0c;重在展示可行性。 例 1:不使用伪元素&#xff0c;仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

yolov5核查数据标注漏报和误报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示&#xff1a;以下是本篇文章正文内容&#xff0c;…

UnityRenderStreaming使用记录(四)

测试把UnityRenderStreaming部署在docker&#xff0c;剧透一下&#xff0c;嘎了…… 当然webserver运行的妥妥的 那么打包出的程序运行log Mono path[0] /home/unity/Broadcast/Broadcast_Data/Managed Mono config path /home/unity/Broadcast/Broadcast_Data/MonoBleedingE…

salesforce addMonths()的问题

如果使用 Salesforce 的 addMonths(1) 方法&#xff0c;将 1月30日 或 1月31日 加一个月&#xff0c;都会得到 2月28日&#xff08;或 2月29日&#xff0c;如果是闰年&#xff09;。这是因为 Salesforce 的 addMonths 方法在跨月份时会自动调整日期&#xff0c;确保结果是有效日…

3. C语言 数据类型

本章目录&#xff1a; 前言&#xff1a;C语言中的数据类型分类1. 基本数据类型1.1 整数类型1.2 浮点类型1.3 字符型常量1.4 字符串常量 2. 枚举类型3. void 类型void类型的使用示例&#xff1a; 4. 类型转换4.1 隐式类型转换4.2 显式类型转换类型转换的注意事项 5. 小结 前言&a…

JUnit注解,枚举

一、JUnit注解&#xff08;Annotations&#xff09; JUnit 是 Java 中用于编写和运行单元测试的框架。JUnit 提供了许多注解&#xff0c;用于控制测试的执行顺序、测试生命周期、断言结果等。以下是一些常用的 JUnit 注解及其作用&#xff1a; 1. Test 用于标记一个方法是测…

富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)

文章目录 一、IDE&#xff08;集成开发环境&#xff09;二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片&#xff0c;其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍&#xff0c;包括IDE&#xff08;集成开…

数据赋能电商:API如何助力品牌成长

在数字时代&#xff0c;数据已成为电商品牌发展的核心驱动力。API&#xff08;应用程序编程接口&#xff09;作为数据交互的桥梁&#xff0c;不仅促进了数据的高效流通&#xff0c;更为电商品牌带来了前所未有的增长机遇。本文将深入探讨API如何助力电商品牌实现数据赋能&#…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」&#xff1a;从基础到进阶的实战指南 数据结构是程序设计中的核心部分&#xff0c;用于组织和管理数据。Java 提供了丰富的集合框架和工具类&#xff0c;涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,

c#集合详解-Dictionary、List、Queue、Stack等

目录 一&#xff0c;非泛型集合 1&#xff0c;ArrayList &#xff08;1&#xff09;创建和初始化ArrayList() &#xff08;2&#xff09;常用方法 ①Add(value) ②AddRange(value) ③Insert(index,value) ④Remove(value) ⑤RemoveAt(index) ⑥clear() ⑦Contains(v…

记一次网闸部署经历

1.在成功获取某大厂伟思网闸设备&#xff0c;并与客户就现有网络架构&#xff08;包括防火墙与交换机&#xff09;进行了详尽的沟通与评估后&#xff0c;我们团队精心构思并提出了一个创新的实施方案——采用透明网桥模式。这一模式以其独特的优势&#xff0c;即无需对客户现有…

SpringCloud(一)--SpringCloud简介

一. 引言 ​ 在微服务架构日益盛行的今天&#xff0c;Spring Cloud凭借其简单易用、功能强大的特性&#xff0c;成为了众多开发者的首选。本文仅为学习所用&#xff0c;联系侵删。 二. SpringCloud概述 2.1 定义 ​ Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地…

SQLALchemy如何将SQL语句编译为特定数据库方言

最近在一个使用fastapitortoise-orm的项目中&#xff0c;需要将orm的语句编译成特定数据库方言&#xff0c;但是查询了官方文档及一些资料却找不到合适的方法论&#x1f614;&#xff0c;于是乎我就把目光放到了sqlalchemy身上&#xff0c;东找西找给我找着了。话不多说&#x…

庐山派K230学习日记2 MicroPython基础

MicroPython文档&#xff1a; https://docs.micropython.org/ MicroPython是编程语言 Python3 的精简高效实现&#xff0c;语法和 Python3 保持一致&#xff0c;但只实现了 Python 标准库的一小部分&#xff0c;并且经过优化&#xff0c;适用于物联网 (IoT)、消费电子和嵌入式…

《计算机组成及汇编语言原理》阅读笔记:p177-p177

《计算机组成及汇编语言原理》学习第 13 天&#xff0c;p177-p177 总结&#xff0c;总计 1 页。 一、技术总结 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…

2000-2020年各省财政一般预算支出面板数据

2000-2020年各省财政一般预算支出面板数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;年份、省份、地方财政一般预算支出 4、范围&#xff1a;31省 指标解释&#xff1a;地方财政一般预算支出‌是指地方ZF根据预算安排&#xff0…

python小项目:给复制出来的段落前添加星号

给复制出来的段落前添加星号 最终效果二、实现步骤2.1 编写python脚本2.2 批处理脚本2.3 运行脚本 三、用到知识3.1 pyperclip 模块 最终效果 说明&#xff1a;复制四段内容&#xff08;段落实际不做限制&#xff09;&#xff0c;在windows终端输入 bulletPointAdder&#xff0…

【LeetCode Hot100 二分查找】搜索插入位置、搜索二维矩阵、搜索旋转排序数组、寻找两个正序数组的中位数

二分查找 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置寻找旋转排序数组中的最小值搜索旋转排序数组寻找两个正序数组的中位数&#xff08;hard&#xff09; 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并…

24.Java 新特性扩展(重复注解、类型注解)

一、重复注解 1、基本介绍 自从 JDK 5 引入注解以来&#xff0c;注解的使用开始流行&#xff0c;在各个框架中被广泛使用 不过注解有一个很大的限制&#xff0c;在同一个地方不能多次使用同一个注解 JDK 8 引入了重复注解的概念 2、具体实现 &#xff08;1&#xff09;自…