SIGSEGV:另一个线程中的QObject破坏

时间:2016-09-06 14:46:46

标签: c++ multithreading qt

我'使用Qt。我有2个班级

A类:负责TCP连接,是我整个程序的单例。通过QT槽调度对适当对象的协议响应(使用QMetaMethod::invoke调用,作为QQueuedConnection)。

B类:经常从QML线程实例化,从A类(推送)中获取数据。

将协议响应映射到对象的唯一方法是通过序列号(每个请求都有一个唯一的序列号)。我不希望将所有对象的每个响应广播,然后过滤它。

A类保留seq_id :(对象,方法)的映射以便正确分派。 (object是指向QObject

的指针

可能会随时删除B类对象,并且A类地图中的响应仍有待处理。这当然导致SIGSEGV,我不知道如何解决它。聆听destroyed()信号是没用的,因为它会超过QQueuedConnection。我的最新想法是使用deleteLater(),因为对象删除将被阻止,直到A类和#34;允许"它(当它没有对该对象的更多开放请求时)。有关于此的任何想法吗?

也欢迎其他建议。

0 个答案:

没有答案