Qt信号和插槽线程安全

时间:2012-12-29 09:47:19

标签: c++ qt thread-safety

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

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

第二个插槽是否与第一个插槽同时启动?如果是这样,Qt是否正在处理线程安全问题,还是程序员需要处理它?<​​/ p>

1 个答案:

答案 0 :(得分:35)

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