boost::signal2 信号/插槽(线程安全的观察者模式)

signals2基于Boost的另一个库signals,实现了线程安全的观察者模式。在signals2中,观察者模式被称为信号/插槽(signals and slots),它是一种函数回调机制,一个信号关联了多个插槽,当信号发出时,所有关联它的插槽都会被调用。

signals2位于名字空间 boost::signals2 ,头文件,即:

#include 
using namespace boost::signals2;

示例代码:


#include 
using namespace boost::signals2;


#include 
using std::cout;
using std::endl;

void slots1()
{
    cout << "slot1 called" << endl;
}
void slots2()
{
    cout << "slot2 called" << endl;
}

template<int N>
class Slot
{
public:
    int operator()(int x){
        cout << "slot " << N << " called" << endl;
        return N * x;
    }
};

void signals2_test()
{
    signal<void()> sig;  //一个信号插槽对象
    sig.connect(&slots1);  //连接插槽1,&可要可不要
    connection c2=sig.connect(slots2,signals2::at_front);  //signals2::at_front标志slots2先被调用
    sig();  //调用operator(),产生信号(事件),触发插槽调用
    sig.disconnect(slots1);  //断开插槽slots1
    sig();
    c2.disconnect();
    //shared_connection_block block(c2);  //暂时阻塞插槽
    //do something
    //block.unblock();  //解除阻塞
    sig();



    signal<int(int)> sig2;
    sig2.connect(Slot<5>());
    sig2.connect(1,Slot<15>());  //1代表插槽组号
    sig2.connect(1,Slot<35>());
    int result=*sig2(2);  //返回最后一个插槽的返回值
    cout << result << endl;
    sig2.disconnect(1);  //断开插槽组的连接
    sig2(2);
}

你可能感兴趣的:(boost,boost)