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线程机制的更多相关文章

  1. Vue.js线程机制问题还是数据双向绑定有延迟的问题

    最近用select2做一个下拉多选,若只是从后端获取一个列表渲染还好说,没有任何问题.但要用select2对数据初始化时进行selected的默认选项进行显示,就出现问题了. vm.$set('are ...

  2. WebClient.DownloadFile(线程机制,异步下载文件)

    线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...

  3. Java多线程与并发库高级应用-传统线程机制回顾

    1.传统线程机制的回顾 1.1创建线程的两种传统方式 在Thread子类覆盖的run方法中编写运行代码 // 1.使用子类,把代码放到子类的run()中运行 Thread thread = new T ...

  4. 从setTimeout到浏览器线程机制

    看高性能javascipt 这本书时,看到这么一句话: Putting scripts at the top of the page in this way typically leads to a ...

  5. java中线程机制

    java中线程机制,一开始我们都用的单线程.现在接触到多线程了. 多线性首先要解决的问题是:创建线程,怎么创建线程的问题: 1.线程的创建: 四种常用的实现方法 1.继承Thread. Thread是 ...

  6. 线程机制、CLR线程池以及应用程序域

    最近在总结多线程.CLR线程池以及TPL编程实践,重读一遍CLR via C#,比刚上班的时候收获还是很大的.还得要多读书,读好书,同时要多总结,多实践,把技术研究透,使用好. 话不多说,直接上博文吧 ...

  7. Java线程机制学习

    前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...

  8. 一步一步掌握java的线程机制(一)----创建线程

    现在将1年前写的有关线程的文章再重新看了一遍,发现过去的自己还是照本宣科,毕竟是刚学java的人,就想将java的精髓之一---线程进制掌握到手,还是有点难度.等到自己已经是编程一年级生了,还是无法将 ...

  9. 从swing分发线程机制上理解多线程[转载]

    本文参考了 http://space.itpub.net/13685345/viewspace-374940,原文作者:javagui 在多线程编程当中,总会提到图形编程,比如java中的swing, ...

随机推荐

  1. JS单词形式的运算符

    1.void 运算表达式并忽略其返回值,比如void (1+2),void (0) <html> <head> <meta http-equiv="conten ...

  2. 正确导入svn拉取的工程

    为什么要写这篇博文?主要是记录摸着石头过黄河的过程.之前在eclipse装了svn插件,拉取远程工程,在eclipse显示的工程,并不会分开显示模块工程,反而 是以总工程的姿态呈现.或许你觉得不管分模 ...

  3. fb设置viewSourceURL

  4. svn项目导入

    svn项目导入 在已建立好svnserverserver的情况下.且所用电脑上已装好svn,在电脑上导入svn项目 首先,新建目录.点击鼠标右键,选择TortoiseSVN–>export 然后 ...

  5. js大小写转换

    toUpperCase 方法返回一个字符串,该字符串中的所有字母都被转化为大写字母 sn.toUpperCase() toLowerCase 方法返回一个字符串,该字符串中的字母被转换为小写字母 sn ...

  6. c++ primer,友元函数上的一个例子(By Sybase)

    本文试图解释c++ primer Screen 和 Window_Mgr的例子,为什么将两个类放在两个文件中无法编译? 将两个类写在同一个文件中,通过三个例子解释问题: 第一种写法问题: 编译到Scr ...

  7. 《RESTful Web Services》第四章 设计URI

    引言 URI是跨越Web的资源描述符,一个URI由以下内容组成——协议.主机.端口号.路径

  8. PHP获取远程图片并调整图像大小

    <?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: *   $Image   需要调整的图片(含路径) *   $Dw= ...

  9. jdbc_连接数据库

    1.例一: package com.vince.jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.s ...

  10. NSURLSession 请求

    参考网站:http://ningandjiao.iteye.com/blog/2010753 http://www.cocoachina.com/industry/20131106/7304.html ...