libjingle线程机制
libjingle包装了所有的线程,包括signaling thread,worker thread, 和其它任何线程,用talk_base::Thread来包装。所有的 Thread对象由ThreadManager来管理 ,ThreadManager可以在线程内任意地方调CurrentThread()用来获取线程指针。
Thread对象继承了MessageQueue实现了类似于windows窗口消息机制,Thread提供了Get、Peek、Post、PostDelayed等一系列消息操作的接口。一个对象想通过MessageQueue接收消息必须继承并实现MessageHandler。MessageHandler定义了OnMessage方法,这个方法在MessageQueue消息中调用。
有两种创建线程的方法
1.AutoThread 用libjingle的Thread对象包装的操作系统线程,并使它成为ThreadManager对象的线程池中的当前线程,(也就是说,当用Thread::CurrentThread调用时返回引线程)
2.Thread 典型用为worker thread,必须创建一个Thread 对象,调用ThreadManager::Add或者ThreadManager::SetCurrent来将它加入池,并调用Run来开始它的循环代码,或者Start来开始线程监听。
你可以向任何线程的任何对象发送消息,只要这个对象继承了talk_base::MessageHandler简单的示例如下:
class Test:public talk_base::MessageHandler
{
public:
Test()
{i=;}
void OnMessage(talk_base::Message *pmsg)
{
if (pmsg->message_id==)
{
talk_base::Thread * curThread=talk_base::Thread::Current();
printf("thread run count=%d threadId=%d\n",++i,curThread->GetThreadId());
} } int i;
}; int _tmain(int argc, _TCHAR* argv[])
{
talk_base::Thread thread;
thread.Start(); Test test; for (int i=;i<;++i)
{
Sleep();
thread.Post(&test,i);
} getchar();
return ;
}
我提取了libjingle的线程的代码,不依赖于libjingle库,只有几个文件,下载添加到项目中即可使用。
https://github.com/zentelfong/ThreadLib
libjingle线程机制的更多相关文章
- Vue.js线程机制问题还是数据双向绑定有延迟的问题
最近用select2做一个下拉多选,若只是从后端获取一个列表渲染还好说,没有任何问题.但要用select2对数据初始化时进行selected的默认选项进行显示,就出现问题了. vm.$set('are ...
- WebClient.DownloadFile(线程机制,异步下载文件)
线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...
- Java多线程与并发库高级应用-传统线程机制回顾
1.传统线程机制的回顾 1.1创建线程的两种传统方式 在Thread子类覆盖的run方法中编写运行代码 // 1.使用子类,把代码放到子类的run()中运行 Thread thread = new T ...
- 从setTimeout到浏览器线程机制
看高性能javascipt 这本书时,看到这么一句话: Putting scripts at the top of the page in this way typically leads to a ...
- java中线程机制
java中线程机制,一开始我们都用的单线程.现在接触到多线程了. 多线性首先要解决的问题是:创建线程,怎么创建线程的问题: 1.线程的创建: 四种常用的实现方法 1.继承Thread. Thread是 ...
- 线程机制、CLR线程池以及应用程序域
最近在总结多线程.CLR线程池以及TPL编程实践,重读一遍CLR via C#,比刚上班的时候收获还是很大的.还得要多读书,读好书,同时要多总结,多实践,把技术研究透,使用好. 话不多说,直接上博文吧 ...
- Java线程机制学习
前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...
- 一步一步掌握java的线程机制(一)----创建线程
现在将1年前写的有关线程的文章再重新看了一遍,发现过去的自己还是照本宣科,毕竟是刚学java的人,就想将java的精髓之一---线程进制掌握到手,还是有点难度.等到自己已经是编程一年级生了,还是无法将 ...
- 从swing分发线程机制上理解多线程[转载]
本文参考了 http://space.itpub.net/13685345/viewspace-374940,原文作者:javagui 在多线程编程当中,总会提到图形编程,比如java中的swing, ...
随机推荐
- JS单词形式的运算符
1.void 运算表达式并忽略其返回值,比如void (1+2),void (0) <html> <head> <meta http-equiv="conten ...
- 正确导入svn拉取的工程
为什么要写这篇博文?主要是记录摸着石头过黄河的过程.之前在eclipse装了svn插件,拉取远程工程,在eclipse显示的工程,并不会分开显示模块工程,反而 是以总工程的姿态呈现.或许你觉得不管分模 ...
- fb设置viewSourceURL
- svn项目导入
svn项目导入 在已建立好svnserverserver的情况下.且所用电脑上已装好svn,在电脑上导入svn项目 首先,新建目录.点击鼠标右键,选择TortoiseSVN–>export 然后 ...
- js大小写转换
toUpperCase 方法返回一个字符串,该字符串中的所有字母都被转化为大写字母 sn.toUpperCase() toLowerCase 方法返回一个字符串,该字符串中的字母被转换为小写字母 sn ...
- c++ primer,友元函数上的一个例子(By Sybase)
本文试图解释c++ primer Screen 和 Window_Mgr的例子,为什么将两个类放在两个文件中无法编译? 将两个类写在同一个文件中,通过三个例子解释问题: 第一种写法问题: 编译到Scr ...
- 《RESTful Web Services》第四章 设计URI
引言 URI是跨越Web的资源描述符,一个URI由以下内容组成——协议.主机.端口号.路径
- PHP获取远程图片并调整图像大小
<?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw= ...
- jdbc_连接数据库
1.例一: package com.vince.jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.s ...
- NSURLSession 请求
参考网站:http://ningandjiao.iteye.com/blog/2010753 http://www.cocoachina.com/industry/20131106/7304.html ...