我在 Red Hat Enterprise Linux 5.3 下使用 boost::signals2。
我的信号创建了一个对象副本并将其指针发送给订阅者。这是为了线程安全而实现的,以防止工作线程在读取对象的同时更新对象上的字符串属性(也许我应该重新考虑使用锁?)。
无论如何,我担心的是多个订阅者在他们自己的线程上取消引用指向复制对象的指针。如何控制对象的生命周期?我如何知道所有订阅者都已使用该对象并且可以安全地删除该对象?
typedef boost::signals2::signal< void ( Parameter* ) > signalParameterChanged_t;
signalParameterChanged_t m_signalParameterChanged;
// Worker Thread - Raises the signal
void Parameter::raiseParameterChangedSignal()
{
Parameter* pParameterDeepCopied = new Parameter(*this);
m_signalParameterChanged(pParameterDeepCopied);
}
// Read-Only Subscriber Thread(s) - GUI (and Event Logging thread ) handles signal
void ClientGui::onDeviceParameterChangedHandler( Parameter* pParameter)
{
cout << pParameter->toString() << endl;
delete pParameter; // **** This only works for a single subscriber !!!
}
提前感谢任何提示或方向,
-埃德