如果从相同的信号中调用它们,Qt可以同时调用两个时隙吗?

时间:2011-09-18 05:11:58

标签: c++ multithreading qt qt4 signals-slots

如果两个不同线程中有两个插槽,并且这些插槽连接到第三个线程中的信号。是否会发生这样的情况:两个时隙都会被信号同时调用,或者它们每次被调用同步?

我问,因为我想发送一些回调数据结构(用QSharedPointer封装)并询问是否需要内部锁定机制。

2 个答案:

答案 0 :(得分:2)

如果您使用Qt :: QueuedConnection将信息传递给线程,则不需要锁定实际的信号/槽调用,因为QueuedConnection机制以线程安全的方式处理此问题。

话虽这么说,你仍然需要保护线程访问的任何共享内存,无论它们是如何被调用的。第三个线程发出单个信号导致两个槽被调用的事实不会改变这一点。

答案 1 :(得分:0)

看看here(有关线程的Qt信号/插槽机制的官方Qt文档)。

每个插槽都在其线程内调用,因此我很确定任何事情都可能发生。你应该安装一个锁机制。