Red Hat EnterpriseLinux5.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 !!!
}
ヒントや方向性を事前に感謝します、
-エド