WebRTC源代码探索之旅——多线程篇(7 - 2)
来源:互联网 发布:nodejs于java跨域传值 编辑:程序博客网 时间:2024/05/16 04:57
7.2 范例代码1
这里先让我们看一段网上摘录的代码:
#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(const std::string& info) { HelpData* data = new HelpData; data->info_ = info; talk_base::Thread::Current()->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 Thread is started"<< std::endl; Police p; p.Help("Please help me!"); talk_base::Thread::Current()->Run(); std::cout << "Test Thread is completed"<<std::endl; return 0;}
这段代码很简单,它演示了单线程环境下如何使用消息处理器。不过这个程序会永久等待在以下语句:
talk_base::Thread::Current()->Run();
不能,正常退出。如果读者感兴趣,可以尝试以下如何使用一条延迟消息,让程序正常退出。
接下来,让我们看一下整个WebRTC代码的调用栈展开会是一个生个状况。可能会出乎你的意料,整个调用栈还是比较复杂的:
从上图可以看到,在调用talk_base::Thread::Current函数之后,整个调用栈涉及到了talk_base::ThreadManager、talk_base::MessageQueue、talk_base::MessageQueueManager三个类,其中talk_base::ThreadManager和talk_base::MessageQueueManager是在其Instance函数被调用后触发构造的全局唯一的对象实例。从这个调用栈可以看出,一旦调用有些talk_base::Thread的成员函数(静态/非静态)就会自动触发构造talk_base::ThreadManager和talk_base::MessageQueueManager,并且把当前线程封装成一个talk_base::Thread实例。
0 0
- WebRTC源代码探索之旅——多线程篇-7
- WebRTC源代码探索之旅——多线程篇-2
- WebRTC源代码探索之旅——多线程篇(7 - 2)
- WebRTC源代码探索之旅——多线程篇-1
- WebRTC源代码探索之旅——多线程篇-3
- WebRTC源代码探索之旅——多线程篇-4
- WebRTC源代码探索之旅——多线程篇-5.1
- WebRTC源代码探索之旅——多线程篇-6
- WebRTC源代码探索之旅——多线程篇-8
- WebRTC源代码探索之旅——多线程篇(7 - 1)
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- WebRTC源代码探索之旅——多线程篇(7 - 1)
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- WebRTC源代码探索之旅——多线程篇(2)
- WebRTC源代码探索之旅——多线程篇(4 - 2)
- WebRTC源代码探索之旅——多线程篇(5 - 2)
- WebRTC源代码探索之旅——多线程篇(6 - 2)
- WebRTC源代码探索之旅——多线程篇(2)
- C++学习之标准库泛型算法_STL算法
- 题目1078:二叉树遍历(根据前序和中序遍历结果,获得后序遍历)
- hdu 4405(期望)
- 基于HBase的存储引擎 Honeycomb
- Matlab图像处理1——imgadjust
- WebRTC源代码探索之旅——多线程篇(7 - 2)
- 凸包问题
- Html表单学习经典例子
- 2014.8.15模拟赛【公主的朋友】
- 分割哈师大分割是否合适地方
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- iOS面试题之加载单张图片到底会不会崩溃?
- C++怪谈——C++多态“失灵”
- Triangle - CodeForces 407A 水题