jjzjj

QueuedConnection

全部标签

c++ - 使用 QueuedConnection 还是 QMutex 来使对象线程安全?

我正在构建一个需要加载数千个HTML文件的应用程序,分析它们然后将它们放入全局的HashMap之类的东西中,我决定使用多线程来加快速度。所以问题出现了,我应该使用QueuedConnection用于信号/槽或QMutex使HashMap线程安全。我使用QueueConnection使一切变得更简单,我创建了很多子线程来加载并将指针发回主线程以分析它们并将它们放入HashMap,然后它工作正常。然而,当我读到一些评论说QueueConnection实际上非常耗时时,我开始重新构建我的代码并使用QMutex使我的HashMap线程安全,然后我可以完成所有工作(加载,分析,将它们放到子线程中

c++ - 如果从同一个信号调用两个槽,Qt 可以同时调用它们吗?

如果在两个不同的线程中有两个槽,并且这些槽连接到第三个线程中的信号。两个槽会同时被信号调用还是每次都被同步调用?我问是因为我想发送一些回调数据结构(用QSharedPointer封装)并询问是否需要内部锁定机制。 最佳答案 如果您使用Qt::QueuedConnection将信息传递给线程,则不需要锁定实际的信号/槽调用,因为QueuedConnection机制以线程安全的方式处理此问题。话虽如此,您仍然需要保护您的线程访问的任何共享内存,无论它们是如何调用的。第三个线程发出单个信号以导致调用两个槽这一事实不会改变这一点。

c++ - 使用 Qt::QueuedConnection 发出信号执行顺序

我有两个信号A和B从线程X中的一个对象接连发出,两个连接的插槽在主线程中。连接是QueuedConnection(由于多线程连接)。我的问题是:在调用槽时是否遵守信号的顺序,或者它们是否有机会以任意顺序执行? 最佳答案 您的两个信号都将在X线程的单个事件队列中排队,因此相应的插槽将按照信号发出的顺序执行。但在以下情况下,您不能依赖插槽执行顺序:signalAconnectedtoaslotinXthreadsignalBconnectedtoaslotinYthread还有一个Qt::BlockingQueuedConnection

c++ - Qt 信号(QueuedConnection 和 DirectConnection)

我遇到了Qt信号问题。我不明白DirectConnection和QueuedConnection是如何工作的?如果有人能解释何时使用其中的哪一个(示例代码将不胜感激),我将不胜感激。 最佳答案 除非您使用具有不同线程关联性的对象,否则您不会看到太大的差异。假设您有QObjectsA和B并且它们都附加到不同的线程。A有一个名为somethingChanged()的信号,而B有一个名为handleChange()的槽。如果你使用直接连接connect(A,SIGNAL(somethingChanged()),B,SLOT(handleC