`

sigslot简介

阅读更多

sigslot简介

2009年02月24日 |本网站遵守CC版权协议 转载请注明出自www.thecodeway.com

    在开发一个复杂工程的时候,经常会遇到这样一个问题:整个系统被分成数个模块,每个模块提供有限的功能,由上层调用组成整个系统,为了保证每个模块的独立性,我们经常会尽量限制模块与模块之间的直接联系,比如每个模块只提供有限的API或者COM接口,而内部实现则完全封闭起来。
    但有的时候会出一些设计要求,必须能够使模块之间能够直接通讯,而这两个模块往往处于不同的逻辑层次,之间相差甚远,如何设计它们之间的调用模式使整个工程维持整洁变得非常困难,比如模块直接直接包含对方的头文件会引起编译变得复杂,提供api或者接口会引起版本危机等问题。
    sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆连接起来就可以实现接口调用,而sigslot本身只是一个轻量级的作品,整个库只有一个.h文件,所以无论处于何种层次的库,都可以非常方便的包含它。

    举个例子,我们设计一个发送消息的类,这个类负责在某种时刻向外界发出求救信号

// Class that sends the notification.
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::signal2std::string , int > SignalDanger;
    
    
// When anyone calls Panic(), we will send the SignalDanger signal.
    
void Panic()
    
{
        
SignalDanger("Help!"0)
    
}
};

另外一个类则负责接收求助信号

// Listening class. It must inherit sigslot.
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 messageint time)
    
{
        
printf("I heard something like \"%s\" at %d!\n"message.c_str()time);
    
}
};

现在让我们在主逻辑中把这两个类连接起来

Sender sender;
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(&receiverReceiver::OnDanger);

只要在任何时候调用 sender.Panic()函数,就会把求救信号发送给接收者,而且这两个发送和接收端的模块都可以独立编译,不会出现版本问题。

分享到:
评论

相关推荐

    Sigslot的简单应用

    Sigslot的简单应用,vc6.0实现 sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆...

    sigslot.h 对象之间发送和接收消息的机制

    sigslot的头文件,sigslot.h 包含了sigslot的实现

    sigslot信号槽demo以及原文件

    sigslot源码。测试的demo.以及官网英文文档。可以直接拿cpp编译 sigslot源码。测试的demo.以及官网英文文档。可以直接拿cpp编译

    c++ sigslot 库

    sigslot是一个用标准C++语法实现的信号与槽机制的函数库,简单到只有一个头文件 sigslot.h

    sigslot信号槽 c++库

    接口简单,一个.h文件就够了,功能强大,跨平台支持多线程

    轻量级消息架构sigslot库

    原头文件在gcc编译中会出现问题,这是修改过去掉模板的资源,linux下随意使用。 sig---信号 slot---插槽 信号.connect(&插槽对象,&插槽类::插槽类成员函数)

    sigslot C++开源库-解决信号对象拷贝问题.zip

    只有一个 sigslot.h 文件超轻量级信号槽开源开源,在解决 Windows 以及 Ubuntu 环境编译问题的基础上,解决信号对象拷贝的BUG(增加实现深度拷贝)。

    线程和类型安全的sigslot源码

    很好用,可以用在多线程里面,跨平台,类型安全,线程安全 只有一个头文件。 google的libjingle里面用到了

    sigslot(解决浅拷贝问题, 增加信号拦截机制).rar

    1. 解决浅拷贝问题 2. 增加信号拦截机制 介绍请参考:https://me.csdn.net/lovemengx

    sigslot_g++4.0下也能编译

    自己试过在gcc version 4.6.3 下也能通过。 在其他地方下载的都不能,折腾了好久。终于找到可以用的拉!

    simple sigslot

    Simple signal slot implementation. As simple as a single header file.

    c++ sigslot

    sigslot的出现为我们提供了一种解决问题的思想,它用“信号”的概念实现不同模块之间的传输问题,sigslot本身类似于一条通讯电缆,两端提供发送器和接收器,只要把两个模块用这条电缆连接起来就可以实现接口调用,而...

    sigslot文档,pdf格式

    sigslot是一个线程安全、类型安全,用C++实现的sig/slot机制(sig/slot机制就是对象之间发送和接收消息的机制)的开源代码库

    sigslot-1-0-0

    一个非常精简的signal & slot 实现库,整个库只有一个&lt;&lt; sigslot.h &gt;&gt;文件。

    callback_sigslot

    花时间重新阅读了callback和sigslot,做了个对比。

    c++sigslot实例

    这个资源是留给自己以后看的。 看了几个小时的sigslot终于弄明白它是怎么回事了,为了担心以后忘记,简单UML图,简单注解,实例。

    C++ Signal/Slot Library (sigslot)

    C++ Signal/Slot Library (sigslot) 消息绑定函数,可以自简化window的编程。

    SignalSlot

    自己使用纯C++实现的信号与槽机制(参考 sigslot.h) 最多支持10个参数, 提供了部分宏,方便使用 包含实例代码, 在VS2012环境下测试OK

    QtSigSlot.7z

    QtSigSlot.7z

    SerialPort_串口通讯封装_Vc_CSerialPort

    利用CserialPort串口通讯类进行封装的DLL接口函数库,该函数库使用方便,功能强大,提供打开串口、设置波特率、发送数据、接收数据、关闭串口等功能,支持多线程、多进程使用,在实际应用中经过反复测试,工作稳定。

Global site tag (gtag.js) - Google Analytics