Qt 信号和槽线程安全

问题描述 投票:0回答:1

假设我有一个连接到插槽通知的信号更改。如果发出更改信号,则通知槽将开始执行。

现在,如果发出第二个更改信号并且第一个通知槽未完成执行,会发生什么?

第二个老虎机是否与第一个老虎机同时推出?如果是这样,是 Qt 处理线程安全还是由程序员来处理?

c++ qt thread-safety
1个回答
40
投票

这取决于您通过调用

connect
函数指定的连接类型。

同时启动插槽的唯一方法是指定

Qt::DirectConnection
并且在与插槽线程不同的线程中发出信号。

如果省略连接类型,则为

Qt::AutoConnection
。在这种情况下,如果您从一个线程发出信号,并在另一个线程中捕获该信号(例如在主 GUI 线程中),Qt 会将槽的调用放入消息队列,并按顺序进行所有调用。

阅读此内容以获取更多信息:跨线程的信号和槽

© www.soinside.com 2019 - 2024. All rights reserved.