Qt 插槽同时断开连接并从不同线程调用

Posted

技术标签:

【中文标题】Qt 插槽同时断开连接并从不同线程调用【英文标题】:Qt slot simultaneous disconnect and call from different theads 【发布时间】:2013-04-08 22:31:38 【问题描述】:

我是 Qt 的新手。我在合理的时间内没有找到答案,所以决定在这里提问。

我有一个线程,我们称它为Thread1,带有一个连接槽的 Qt 对象。信号从同一线程 (Thread1) 发出。 我正在将此插槽与另一个 Thread2 断开连接。

这个操作线程安全吗? 如果同时发出一个信号并断开插槽,是否有任何问题?

【问题讨论】:

【参考方案1】:

只看文档,对我来说它看起来很安全:

http://qt-project.org/doc/qt-4.8/qobject.html

注意:该类中的所有函数都是可重入的,但 connect()、connect()、disconnect() 和 disconnect() 也是线程安全的。

http://qt-project.org/doc/qt-4.8/qobject.html#disconnect

注意:这个函数是线程安全的。

当您将一个线程的信号连接到另一个线程的插槽时,请确保您使用的是队列连接。如果在连接期间两个对象碰巧在同一个线程中,则自动连接可能会出现异常(并进行直接连接)。

希望对您有所帮助。

编辑:关于线程安全的更多信息:

http://qt-project.org/doc/qt-4.8/threads-reentrancy.html

http://qt-project.org/doc/qt-4.8/threads-qobject.html

【讨论】:

好吧。我读过这个,但我不确定我的问题。看。这是什么意思 - “线程安全功能”? - 这意味着一个函数有一些互斥锁之王,它可以防止与另一个受互斥锁保护的函数同时执行。但是,如果一个函数具有互斥锁,而另一个没有,则它们的同时执行不是线程安全的,尽管其中一个是线程安全的。所以,我想知道 - 信号/插槽执行过程是否可以通过断开功能同时执行来保护。文件是否暗示了这一点?因为它在我看来并不明显 好吧,如果你问Is this operation thread safe?,人们会假设你知道thread safe 的含义。

以上是关于Qt 插槽同时断开连接并从不同线程调用的主要内容,如果未能解决你的问题,请参考以下文章

Qt 拾遗 003 disconnect

客户端断开连接后,WCF操作未运行

Qt 4.8:来自不同线程的两个信号和一个插槽之间的连接行为

断开Qt后连接到服务器时客户端程序崩溃

是否可以断开 QObject 的所有连接而不删除它

superset连接sqlite频繁断开