我从非Qt线程调用emit signal1()
。 非Qt线程我的意思不是来自GUI Event Loop,也不是来自任何QThread run()方法或任何QThread自己的事件循环。从非Qt线程或外部Qt主事件循环中发出Qt信号,并且在4.5
它只是一个调用发出信号的QObject的方法的pthread(pthread_create())。
例如:
MyQbject: public QObject
{
...
void emitBunchOfSignals()
{
emit signal1();
emit signal2();
...
}
...
}
我的并行线程的“运行”方法,它有一个指向MyObject的实例(实例是主要的Qt的图形用户界面线程不是上下文并行线程中创建)调用emitBunchOfSignals()
方法。
在Qt 4.5之前,这是讨厌的。现在,Qt 4.5是如何处理这个问题的? 它是否调用qApp->PostEvent()
或其他东西,使信号在Qt GUI线程(以及插槽中)内发射?
感谢
当您调用connect时,您可能会显式地将类型设置为排队连接。 – 2010-01-15 15:46:42
在你写下这个问题的时候,你可以打开代码并寻找自己。 – shoosh 2010-01-15 16:00:04
它似乎并没有像Qt 3.xx一样崩溃。 我熟悉连接选项(直接连接queuedconnection等),但我认为它只能在QTreads或QThread和主事件循环之间起作用。为什么它曾经与Qt 3.xx一起崩溃,至少通过查看代码并不是直截了当的理解。我疯了吗 ? – 2010-01-15 16:10:27