【发布时间】:2023-03-26 08:40:01
【问题描述】:
在Qt中多线程使用'emit'发送大量信号,触发很慢。貌似有排队机制。有什么好办法可以快速触发线路上的一个信号槽?
【问题讨论】:
-
你想在发出信号的线程中调用槽吗?如果是这样,请确保它是线程安全的,并且它调用的所有内容也是线程安全的!特别是,GUI 的东西必须全部发生在主线程中!
标签: c++ qt signals-slots
在Qt中多线程使用'emit'发送大量信号,触发很慢。貌似有排队机制。有什么好办法可以快速触发线路上的一个信号槽?
【问题讨论】:
标签: c++ qt signals-slots
你问的是Qt::DirectConnection。您需要在connect() 中指定它以保证插槽将立即被调用。
使用时:
当信号发出时,槽会立即被调用。该槽在信号线程中执行。
否则默认Qt方式调用Qt::AutoConnection。
如果接收者位于发出信号的线程中,则使用 Qt::DirectConnection。否则,使用 Qt::QueuedConnection。连接类型在信号发出时确定。
您可以在connect()中指定连接类型:
QMetaObject::Connection QObject::connect(const QObject *sender, const
char *signal, const QObject *receiver, const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
关于这两者之间的区别以及如何使用的很好的答案是here。
【讨论】: