回帖:看Qt手册的话,很少有函数标称是 threadsafe 的,但 postEvent() 是线程安全的:
void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
....
Note: This function is thread-safe
这一函数,方便了我们在多线程之间传递数据(通过事件队列),而不需要手动加锁。
QueuedConnection信号槽 其实也是通过这一个函数的将 信号封装成一个对象,进而传递到目标线程的事件队列的。目标线程的事件循环发现收到对象后,将其作为函数和函数参数进行调用。
不用这一机制,也没什么错,无非Qt不保证线程安全,和常规多线程一样,自己手动加锁就好了。