WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑:

cpp 复制代码
while(true)
{
	...
	Get(&msg, ...);
	...
	Dispatch(&msg);
	...
}

Dispatch(Message *pmsg) {
	...
	pmsg->handler->OnMessage(pmsg);
	...
}

在执行函数内部,就是一个while死循环,只做两件事,从队列里Get取出消息,然后调用Dispatch处理消息。

在Dispatch函数中会调用入参*pmsg消息的handler的OnMessage处理消息,

具体如何处理消息,每一个pmsg内部有不同的逻辑,

就是把控制权交给的发送线程,发送线程在执行时它是知道需要做什么事的,但是这个事情需要交给其他的线程来做,

但是执行线程是不知道发送线程要执行怎样的逻辑,那么最好的方法就是发送线程将执行的逻辑写好,执行线程只要按照发送线程的要求去执行任务就OK了。

【编程思想】

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

WebRTC中的具体代码实现:

cpp 复制代码
// 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);
}
相关推荐
metaRTC2 天前
metaRTC8 成功适配 RTOS:开启 MCU/嵌入式实时音视频新时代
单片机·嵌入式硬件·webrtc·实时音视频·rtos
Fisher3Star2 天前
mediasoup中ip与announceAddress配置要点
webrtc·sdp
小柯博客3 天前
Amazon Kinesis Video Streams C WebRTC SDK 开发实战
c语言·开发语言·网络·stm32·嵌入式硬件·webrtc·yocto
RTC老炮4 天前
WebRTC下FlexFEC算法架构及原理
网络·算法·音视频·webrtc
换个昵称都难5 天前
webrtc源码下载(2026年4月)
webrtc
牛奶5 天前
不经过服务器,两个人怎么直接通话?
前端·websocket·webrtc
RTC老炮6 天前
音视频FEC前向纠错算法Reed-Solomon原理分析
网络·算法·架构·音视频·webrtc
dualven_in_csdn6 天前
【webrtc】ubuntu 编译中遇到的问题
webrtc
RTC老炮12 天前
RaptorQ前向纠错算法架构分析
网络·算法·架构·webrtc
许彰午13 天前
# 政务远程帮办:WebRTC视频通话+录屏录音+手工拼WAV实录
音视频·webrtc·政务