我'使用Qt。我有2个班级
A类:负责TCP连接,是我整个程序的单例。通过QT槽调度对适当对象的协议响应(使用QMetaMethod::invoke
调用,作为QQueuedConnection
)。
B类:经常从QML线程实例化,从A类(推送)中获取数据。
将协议响应映射到对象的唯一方法是通过序列号(每个请求都有一个唯一的序列号)。我不希望将所有对象的每个响应广播,然后过滤它。
A类保留seq_id
:(对象,方法)的映射以便正确分派。 (object是指向QObject
)
可能会随时删除B类对象,并且A类地图中的响应仍有待处理。这当然导致SIGSEGV
,我不知道如何解决它。聆听destroyed()
信号是没用的,因为它会超过QQueuedConnection
。我的最新想法是使用deleteLater()
,因为对象删除将被阻止,直到A类和#34;允许"它(当它没有对该对象的更多开放请求时)。有关于此的任何想法吗?
也欢迎其他建议。