boost中信号用着特别简单,需要就注册不需要要就删除,可以注册任意的对象函数,只要触发信号所有注册了该信号的对象都会被调用。下面就自己实现一个类似的功能。首先实现一个信号发送者的基类,所有需要发送信号的对象都继承该类就可以了,代码如下:
//发送信号
class CRecvSignal;
class CSendSignal
{
public:
friend class CRecvSignal;
CSendSignal() {}
virtual ~CSendSignal()
{
for (SignalVector::iterator iter = m_pRecvSignal.begin(); iter != m_pRecvSignal.end();++iter)
{
for (auto it = iter->second.begin();it != iter->second.end();++it)
(it->first)->RemoveSignal(iter->first, this);
}
}
//信号注册函数pSignal接收信号对象,nSignalType信号类型自己是发送信号者
bool AddSignal(CRecvSignal* pSignal, uint32_t nSignalType)
{
if (!pSignal->RegisteredSignal(nSignalType, this))return false;
if (!m_pRecvSigna