Qt|多线程信号槽连接方式(可以解决多线程顺序执行问题)

参考:
QT信号槽的5种连接方式
Qt信号槽的一些事、

QT信号槽的5种连接方式

enum ConnectionType{
	AutoConnection,		// 默认值
	DirectConnection,	// 类回调,同一线程直接调用不会等
	QueuedConnection,	// 多线程,顺序执行
	BlockingQueuedConnection,	// 多线程,阻塞发送者
	UniqueConnection			// 防止重复连接(我感觉没用啊)
}
  1. Qt::AutoConnection
  • 如果接受者和发送者在同一线程,自动使用Qt::DirectConnection。
  • 如果接受者和发送者不在同一线程,自动使用Qt::QueuedConnection。
  1. Qt::DirectConnection
    槽函数会在信号发送时直接调用,都在同一线程中执行,类似回调。
  2. Qt::QueueConnection
    槽函数在控制回到接受者所在线程的事件循环时被调用,槽函数运行于信号接收者线程。
    多线程使用,不会阻塞发送者线程,会并发执行调试跳来跳去。
  3. Qt::BlockingQueuedConnection
    和QueuedConnection一致,但会阻塞发送者线程,直到槽函数运行完。
    发送者和接受者不能在同一线程中,否则会死锁。
  4. Qt::UniqueConnection
    防止重复连接,如果当前信号和槽已经连接过了,就不会再连接了。

你可能感兴趣的:(C/C++/qt,qt)