在开发一个复杂工程的时候,经常会遇到这样一个问题:整个系统被分成数个模块,每个模块提供有限的功能,由上层调用组成整个系统,为了保证每个模块的独立性,我们经常会尽量限制模块与模块之间的直接联系,比如每个模块只提供有限的API或者COM接口,而内部实现则完全封闭起来。
但有的时候会出一些设计要求,必须能够使模块之间能够直接通讯,而这两个模块往往处于不同的逻辑层次,之间相差甚远,如何设计它们之间的调用模式使整个工程维持整洁变得非常困难,比如模块直接直接包含对方的头文件会引起编译变得复杂,提供api或者接口会引起版本危机等问题。
sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆连接起来就可以实现接口调用,而sigslot本身只是一个轻量级的作品,整个库只有一个.h文件,所以无论处于何种层次的库,都可以非常方便的包含它。
举个例子,我们设计一个发送消息的类,这个类负责在某种时刻向外界发出求救信号
class Sender
{
public:
// The signal declaration.
// The ’2′ in the name indicates the number of parameters. Parameter types
// are declared in the template parameter list.
sigslot::signal2< std::string , int > SignalDanger;
// When anyone calls Panic(), we will send the SignalDanger signal.
void Panic()
{
SignalDanger("Help!", 0);
}
};
另外一个类则负责接收求助信号
class Receiver : public sigslot::has_slots<>
{
public:
// When anyone calls Panic(), Receiver::OnDanger gets the message.
// Notice that the number and type of parameters match
// those in Sender::SignalDanger, and that it doesn’t return a value.
void OnDanger(std::string message, int time)
{
printf("I heard something like \"%s\" at %d!\n", message.c_str(), time);
}
};
现在让我们在主逻辑中把这两个类连接起来
Receiver receiver;
// Receiver registers to get SignalDanger signals.
// When SignalDanger is sent, it is caught by OnDanger().
// Second parameter gives address of the listener function class definition.
// First parameter points to instance of this class to receive notifications.
sender.SignalDanger.connect(&receiver, Receiver::OnDanger);
只要在任何时候调用 sender.Panic()函数,就会把求救信号发送给接收者,而且这两个发送和接收端的模块都可以独立编译,不会出现版本问题。
相关推荐
Sigslot的简单应用,vc6.0实现 sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆...
sigslot的头文件,sigslot.h 包含了sigslot的实现
sigslot源码。测试的demo.以及官网英文文档。可以直接拿cpp编译 sigslot源码。测试的demo.以及官网英文文档。可以直接拿cpp编译
sigslot是一个用标准C++语法实现的信号与槽机制的函数库,简单到只有一个头文件 sigslot.h
接口简单,一个.h文件就够了,功能强大,跨平台支持多线程
原头文件在gcc编译中会出现问题,这是修改过去掉模板的资源,linux下随意使用。 sig---信号 slot---插槽 信号.connect(&插槽对象,&插槽类::插槽类成员函数)
只有一个 sigslot.h 文件超轻量级信号槽开源开源,在解决 Windows 以及 Ubuntu 环境编译问题的基础上,解决信号对象拷贝的BUG(增加实现深度拷贝)。
很好用,可以用在多线程里面,跨平台,类型安全,线程安全 只有一个头文件。 google的libjingle里面用到了
1. 解决浅拷贝问题 2. 增加信号拦截机制 介绍请参考:https://me.csdn.net/lovemengx
自己试过在gcc version 4.6.3 下也能通过。 在其他地方下载的都不能,折腾了好久。终于找到可以用的拉!
Simple signal slot implementation. As simple as a single header file.
sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆连接起来就可以实现接口调用,而...
sigslot是一个线程安全、类型安全,用C++实现的sig/slot机制(sig/slot机制就是对象之间发送和接收消息的机制)的开源代码库
一个非常精简的signal & slot 实现库,整个库只有一个<< sigslot.h >>文件。
花时间重新阅读了callback和sigslot,做了个对比。
这个资源是留给自己以后看的。 看了几个小时的sigslot终于弄明白它是怎么回事了,为了担心以后忘记,简单UML图,简单注解,实例。
C++ Signal/Slot Library (sigslot) 消息绑定函数,可以自简化window的编程。
自己使用纯C++实现的信号与槽机制(参考 sigslot.h) 最多支持10个参数, 提供了部分宏,方便使用 包含实例代码, 在VS2012环境下测试OK
QtSigSlot.7z
利用CserialPort串口通讯类进行封装的DLL接口函数库,该函数库使用方便,功能强大,提供打开串口、设置波特率、发送数据、接收数据、关闭串口等功能,支持多线程、多进程使用,在实际应用中经过反复测试,工作稳定。