Libjingle之线程操作
来源:互联网 发布:ug7编程余量参数说明 编辑:程序博客网 时间:2024/06/05 21:17
Libjingle中的Thread与Runnable与android中很相似。用法却不太相同。因为android中的Handler可以直接在当前Activity中定义,并且可以访问activity的局部变量。所以在thread中post过来的数据可以与activity很方便的交互。
但是libjingle用法有一些不同。在libjingle中使用如下:
libjingle的pcp例子中,未使用线程,因为会阻塞主线程。所以在使用它的时候,必须要开启另外的线程来操作它。于是我们需要定义一个单独的FileShareThread:public talkbase::thread,然后加入SendFile方法 SendFile(std::string to,std::string filename),然后在这个SendFile方法Post一个消息,在Start后,该FileShareThread会调用CreateThread(win32情况下)来创建一个线程,再调用SendFile方法,在SendFile中Post的消息会激活当这个FileShareThread线程,并激活与CreateThread绑定的线程方法static void *PreRun(void *pv);,而在PreRun方法会找到FileShareThread::Run方法,而Run方法什么都不做,只是ProcessMessages,这将导致最终会进入到FileShareThread的 void OnMessage(talk_base::Message* pmsg);中,于是我们可以在这个方法中switch一下消息,进行相应的处理。
这可能与传统的操作系统线程使用方法有些不同。开始我也觉得很奇怪,而且libjingle的例子里面也没有详细的说明。这个库的资料比较少,虽然也有一些人气,但是对于新的版本(0.5以下)的资料很少,甚至于官方的文档都没有说明。
主要有几个区别:
1.操作系统的是基于createthread或者biginthreadex来创建一个线程,创建的时候指定回调函数。
Libjingle是基于消息队列的方法,在Start方法中创建这个线程
2操作系统通常在创建线程后,就直接启动该线程了,或者也有通过线程ID来suspend这个线程的,
Libjingle却是在Post消息后,才激活线程。
3.操作系统的线程是将所有的实现都写在线程的回调函数中。
Libjingle的所有实现都得放在OnMessage中来实现。
至于线程与主线程的通讯方式,这一点当然不可能像android一样方便了。暂时还没有更好的办法。
- Libjingle之线程操作
- libjingle的线程操作
- libjingle翻译之《关于libjingle》
- libjingle翻译之《关于libjingle》
- libjingle翻译之《Important Concepts(重要概念)之Threads(线程)》
- libjingle翻译之《Important Concepts(重要概念)之Threads(线程)》
- libjingle
- Libjingle
- Libjingle
- libjingle源码分析之:P2P
- 实战libjingle之sigslot,MessageHandler
- libjingle之(程序的封装)
- libjingle之(程序的封装)
- libjingle源码分析之三:P2P
- libjingle源码分析之:Thread和SocketServer
- libjingle源码分析之:Session和Transport
- libjingle源码分析之三:P2P传输
- libjingle翻译之《Important Concepts(重要概念)之SSL Support(SSL支持)》 分类: libjingle
- 转载一个js实现div拖动效果
- 表单&符号注入XSS漏洞
- C++串口编程实例
- Porting WiFi drivers to Android
- libjingle的线程操作
- Libjingle之线程操作
- 怎样用JSP获取当前用户的网卡IP和MAC地址?
- 七夕恋歌
- iPhone 5和iOS 6正式发布,亮点有余创新不足
- Sql Server 千位分隔符 3位逗号分隔
- g723编解码简述
- 使用fedora进行Android源码的编译
- 莱文森-德宾递推公式证明
- Android 应用开发笔记 - 多项选择(CheckBox)