Qt信号和插槽线程安全



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

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

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

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

最新更新