WebRTC源代码探索之旅——多线程篇(6 - 2)

本文详细介绍了WebRTC中talk_base::Thread类在多线程编程中的作用,包括其主要组件、成员函数,以及如何处理消息发送。文章探讨了线程的启动、停止、封装和解除封装,以及线程间交互的工作机制。同时,对比了Windows API和Linux API在实现线程功能上的差异。
摘要由CSDN通过智能技术生成

6.3 talk_base::Thread

 

talk_base::Thread的主要功能是封装线程,为线程提供消息队列和多路信号分离器的功能。需要注意的是,talk_base::Thread的绝大多数功能是talk_base::MessageQueue和talk_base::PhysicalSocketServer的代码提供的,仅有talk_base::Thread::Send函数的功能主要由talk_base::Thread的代码提供。

 

talk_base::Thread的主要组件包括:

sendlist_:通过talk_base::Thread::Send函数请求处理的消息列表

running_:标示系统线程是否在正在运行的talk_base::Event,该成员变量表示线程正在运行

thread_:保存系统的线程句柄/pthread_t对象

owned_:标示talk_base::Thread对象是否是线程的所有者,该变量的语义和大家的直觉可能很不一样(至少和我的直觉不一样,造成了不少麻烦)。由talk_base::Thread::Start函数启动的系统线程,该成员变量为true;通过talk_base::Thread::WrapCurrent函数包装的线程为false。并不是talk_base::Thread实例对应的哪个线程就占有(own)哪个线程,甚至有些情况下talk_base::Thread实例是唯一的封装系统线程的实例,并通过talk_base::Thread::WrapCurrent设置到了TLS中去,但是这个实例依然不占有系统线程。唯有通过talk_base::Thread::Start函数启动的系统线程,该实例才占有那个系统线程。这个概念很重要,它会影响很多函数的行为。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值