Libjingle之线程操作

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一样方便了。暂时还没有更好的办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值