博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libjingle线程机制
阅读量:4657 次
发布时间:2019-06-09

本文共 1367 字,大约阅读时间需要 4 分钟。

    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=0;}    void OnMessage(talk_base::Message *pmsg)    {        if (pmsg->message_id==50)        {            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=0;i<100;++i)    {        Sleep(30);        thread.Post(&test,i);    }        getchar();    return 0;}

 我提取了libjingle的线程的代码,不依赖于libjingle库,只有几个文件,下载添加到项目中即可使用。

 https://github.com/zentelfong/ThreadLib

 

 

 

转载于:https://www.cnblogs.com/zentel/p/3751636.html

你可能感兴趣的文章
Java内部类详解
查看>>
初识Twisted(一)
查看>>
linux 软件安装篇
查看>>
Sql server数据库大小写敏感设置
查看>>
JAVA多线程-内存模型、三大特性、线程池
查看>>
RxJS速成 (下)
查看>>
无锁栈与无锁队列
查看>>
微信开发第8章 通过accesstoken将长连接转换为短链接
查看>>
[刷题]Codeforces 785D - Anton and School - 2
查看>>
四川红油的制法
查看>>
Java重写《C经典100题》 --21
查看>>
【Android基础】Fragment 详解之Fragment生命周期
查看>>
链表(裸题)
查看>>
11运算符重载
查看>>
磁盘系统的管理
查看>>
C/S
查看>>
Http Get/Post请求的区别
查看>>
STM32一键下载电路设计原理
查看>>
C语言中函数返回字符串的四种方法
查看>>
10月区块链领域投融资事件盘点
查看>>