Signals、sigslot简介
在复杂的工程中,整个系统被分为数个模块,每个模块提供有限的功能,由上层调用从而组成整个系统,为了保证每个模块的独立性,我们经常限制模块与模块之间直接联系,每个模块只提供有限的API或Com接口,内部完全封装起来。
有时候两个不同的逻辑层的模块需要通信,如果直接include头文件会使项目变的复杂,sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆连接起来就可以实现接口调用,而sigslot本身只是一个轻量级的作品,整个库只有一个.h文件,所以无论处于何种层次的库,都可以非常方便的包含它。
举个例子,我们设计一个发送消息的类,这个类负责在某种时刻向外界发出求救信号
#include "sigslot.h"
class Sender
{
public:
// 定义信号,该信号有两个参数
sigslot::signal2< std::string , int > SignalDanger;
// 该函数发送消息
void Panic()
{
SignalDanger("Help!", 0);
}
};
另外一个类则负责接收求助信号
class Receiver : public sigslot::has_slots<>
{
public:
// 接收SignalDanger 信号的函数,该函数参数必须和信号的参数一致
void OnDanger(std::string message, int time)
{
printf("I heard something like "%s" at %d!n", message.c_str(), time);
}
};
现在让我们在主逻辑中把这两个类连接起来
Sender sender;
Receiver receiver;
// 将发送者的信号连接到接收方的接收函数上;和断开连接
sender.SignalDanger.connect(&receiver, Receiver::OnDanger);
sender.SignalDanger.disconnect(&receiver);
只要在任何时候调用 sender.Panic()函数,就会把求救信号发送给接收者,而且这两个发送和接收端的模块都可以独立编译,不会出现版本问题。
扩展思考:
1. 可以在消息循环处理函数中调用不同的类进行处理
Threads、signaling thread和worker thread
Libjingle部件使用一个或两个全局线程:
Signaling thread:它主要用来创建所有底层部件、例如Session Manager、Control、Xmpp.
worker thread(channel thread):被P2P组件对象用来处理更多资源密集的过程,例如数据流。放入独立线程中的这些数据流,被xmpp阻塞或被用户界面阻塞。使用worker thread的类有ChandleManager,SocketMonitor、P2PtransportChannel和port objects。为了使用该线程,你必须创建一个thread对象并将它传递到SessionMnager的constructor中。如果没有线程对象传入、the thread in which sessionManager 被创建为工作线程。在CallClient::InitPhone中演示了如何为底层创建一个workthread线程。
此外,现在libjingle提供了一个SignalThread,扩展此类现存的类可用,可被实例化、开始、
相关推荐
libjingle中的重要概念 关于libjingle你应当理解下面的重要概念: Signals Threads and Messages Naming Conventions SSL Support Connections Transports, Channels, and Connections Candidates Data ...
VS2010编译libjingle0.6.2步骤 图文并茂
libjingle 中文 手册,很不错的哦,描述的很清楚,还有使用范例
带GIPS的libjingle source
Google的源码发布基于Berkeley协议,也就是说你可以把它们合并到商业或非商业的软件中并发布。 此外关于Google Talk的互操作性,函数库里有许多通用组件如P2P栈,它可用来创建各样的通信和协作应用程序。我们希望...
libjingle vs2010 编译通过
libjingle-0.5.1.zip,WebRTC nat打洞专用。
android Webrtc ( libjingle_peerconnection_builds 包括例子
Libjingle是Google提供的C++组件集,它为Google Talk的点对点通讯与语音呼叫功能提供交互操作性。组件包包括了Jingle和Jingle-Audio的google实现的源代码,它们是XMPP标准的推荐扩展,目前试验版可用。 我们发布此...
libjingle源码(含GIPS LITE),方便大家编译上传
libjingle0.6.14 版本,p2p学习
从官网上复制的libjingle开发者指南和源码索引,你也可以访问一下网站: https://developers.google.com/talk/libjingle/developer_guide
libjingle0.6.14编译好的.lib
libjingle_peerconnection.jar libjingle_peerconnection.so
libjingle的封装库,可以快速开发基于XMPP的客户端通信,方便试用
最完全,最全面的Android框架列表libjingle_peerconnection_so
源:https://developers.google.com/talk/libjingle/reference/ 语言:English 源于谷歌的libjingle的API。 个人整理成表格,方便开发时查找。 希望能帮助相关开发者。
作者:Group ArmTalk 文档:2011-11-30 ...1. Libjingle是什么 2. 怎么获取Libjingle 3. 怎么交叉编译Libjingle(arm-linux-) 以下是个人说明: 要在ARM架构的嵌入式设备使用libjingle,可以参考该文档进行操作
libjingle 0.6.6、0.6.9以及最新的0.6.10在windows和ubuntu-linux上编译通过,现将编译过程及遇到的一些问题总结分享一下