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 插槽同时断开连接并从不同线程调用的主要内容,如果未能解决你的问题,请参考以下文章