WebRTC源代码探索之旅——多线程篇(7 - 3)
来源:互联网 发布:数据库流程图怎么画 编辑:程序博客网 时间:2024/06/05 06:19
7.3 范例代码2
范例代码1是一个单线程的例子,所以并不能够足以研究WebRTC在多线程环境下的工作情况。因此,在这个例子的基础上,我把它改良成了多线程的版本:
- #include <string>
- #include <iostream>
- #include "talk/base/thread.h"
- class HelpData : publictalk_base::MessageData
- {
- public:
- std::string info_;
- };
- class Police : publictalk_base::MessageHandler
- {
- public:
- enum {
- MSG_HELP,
- };
- void Help(talk_base::Thread& targetThread, const std::string&info) {
- HelpData* data = new HelpData;
- data->info_ = info;
- targetThread.Post(this, MSG_HELP, data);
- }
- virtual void OnMessage(talk_base::Message* msg) {
- switch (msg->message_id) {
- case MSG_HELP:
- HelpData* data = (HelpData*)msg->pdata;
- std::cout << "MSG_HELP :" << data->info_<< std::endl;
- break;
- }
- }
- };
- int main(int argc, char** argv)
- {
- std::cout << "Test Multi-thread is started"<<std::endl;
- Police p;
- talk_base::Thread thread;
- thread.Start();
- p.Help(thread, "Please help me!");
- talk_base::Thread::Current()->SleepMs(100);
- std::cout << "Test Multi-thread is completed" <<std::endl;
- return 0;
- }
这个版本的代码仅仅就是稍微改装了一点点,但是整个调用栈的情况发生了很大的变化:
从上图可以看出,虽然在多线程环境下情况复杂得多,但是WebRTC依然可以保证talk_base::ThreadManager和talk_base::MessageQueueManager这两个全局设施可以在任何子线程启动之前被构造完毕。
结合以上2个例子,加上本文对涉及的各个类的解说,我想应该大多数读者能够掌握WebRTC的线程模型的所有细节。如果还有什么疑问的话,那就只能靠动手才能解决问题了。请将以上两个例子编译通过并在你有疑惑的函数中设置log输出,甚至于单步调试你有疑惑的代码,是掌握代码原理的终极手段。
0 0
- WebRTC源代码探索之旅——多线程篇-7
- WebRTC源代码探索之旅——多线程篇-3
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- WebRTC源代码探索之旅——多线程篇-1
- WebRTC源代码探索之旅——多线程篇-2
- WebRTC源代码探索之旅——多线程篇-4
- WebRTC源代码探索之旅——多线程篇-5.1
- WebRTC源代码探索之旅——多线程篇-6
- WebRTC源代码探索之旅——多线程篇-8
- WebRTC源代码探索之旅——多线程篇(7 - 1)
- WebRTC源代码探索之旅——多线程篇(7 - 2)
- WebRTC源代码探索之旅——多线程篇(7 - 1)
- WebRTC源代码探索之旅——多线程篇(3)
- WebRTC源代码探索之旅——多线程篇(5 - 3)
- WebRTC源代码探索之旅——多线程篇(6 - 3)
- WebRTC源代码探索之旅——多线程篇(3)
- WebRTC源代码探索之旅——多线程篇(5 - 3)
- WebRTC源代码探索之旅——多线程篇(6 - 1)
- Gradle 教程说明 用户指南 1~6章
- 压缩感知中的数学知识:线性方程组的解
- WebRTC源代码探索之旅——多线程篇(7 - 1)
- Facebook将从明年执行新隐私政策
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- WebRTC源代码探索之旅——多线程篇(8)
- 如何使用 LotusScript 代理来发送 HTML 格式的邮件
- 2014.11.28中午
- IOS学习 深入浅出Cocoa之动态创建类
- FLV文件格式解析
- 如何为IOS应用建立清晰易懂的项目目录结构
- Gradle 教程说明 用户指南 第7章 构建Java工程----快速入门
- http://www.jq22.com/