Qt:信号槽无法响应/信号丢失/槽函数不调用的问题
QT信号槽的本质。
同一线程:默认是直连,类似于SendMessage在本线程的直接分发处理,但实际不走消息队列,而是直接查表后调用槽函数;如果指定QueuedConnection,则使用PostMessage的方式,Windows平台下就是使用的消息队列。
不同的线程:走消息队列。如果指定QueuedConnection,则使用PostMessage的方式;如果指定BlockingQueuedConnection,相当于SendMessage跨线程的操作,会阻塞等待接收线程处理完毕。
因此,信号槽在QueuedConnection方式下,是不安全的,可能存在信号丢失的情况。这个不一定是多线程,如果是同一个线程,指定了信号槽的连接方式就是QueuedConnection,也会有信号丢失的情况,因为PostMessage就是会丢失消息的。
所以,为了保险起见,多线程情况下,重要的消息应该使用BlockingQueuedConnection方式。但需要注意,避免死锁。
本人遇到的问题并非是槽函数不调用,而是其他问题。
转载请注明来源,谢谢。
有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]。