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

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.kler.cn/a/464850.html

相关文章:

  • Java SpringBoot使用Apache POI导入导出Excel文件
  • Spring系列一:spring的安装与使用
  • 性能测试03|JMeter:断言、关联、web脚本录制
  • React 中结合 antd 的 Input 组件实现防抖输入
  • 交换机关于环路、接口绑定、链路聚合的相关知识
  • SpringCloudAlibaba实战入门之路由网关Gateway过滤器(十三)
  • 利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步
  • Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
  • C++软件设计模式之观察者模式
  • 服务端错误的处理和web安全检测
  • 【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑
  • 【每日学点鸿蒙知识】一键登录、包资源分析工具、har包版本冲突、系统相册等
  • 常用的mac软件下载地址
  • torch.nn.Embedding模块介绍
  • gesp(C++一级)(14)洛谷:B4001:[GESP202406 一级] 立方数
  • 数据集的处理:将Storystream的数据集处理为可训练的格式
  • 服务器上会话存储项目
  • 在群晖上搭建PlaylistDL音乐下载器
  • 了解行处理工具:grep 、cut 、sort、uniq 、tee 、diff 、paste 、tr
  • Generative Feature Replay For Class-Incremental Learning 中文版
  • 链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践
  • 【C++项目实战】贪吃蛇小游戏
  • Pytorch使用手册-空间变换网络指南(专题十五)
  • Excel 面试 02 逻辑函数 AND
  • JUC学习
  • mysql报错2059