26

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

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

第二个插槽是否与第一个插槽同时启动?如果是这样,是 Qt 处理线程安全还是由程序员来处理它?

4

1 回答 1

37

这取决于您通过调用connect函数指定的连接类型。插槽将同时启动的唯一方法是,如果您Qt::DirectConnection在与插槽线程不同的线程中指定 AND 发射信号。如果您省略连接类型,它将是Qt::AutoConnection. 在这种情况下,如果您从一个线程发出信号,并在另一个线程中捕获它(例如,在主 GUI 线程中) - Qt 会将插槽的调用放入消息队列,并将按顺序进行所有调用。阅读此内容以获取更多信息 - http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads

于 2012-12-29T10:06:22.457 回答