在我的 Qt 应用程序中,我有一个主线程和一个工作线程。工作线程子类QThread
并通过处理事件customEvent
。这是主线程发送要由工作线程处理的事件的正确方法吗?
QThread* myWorkerThread = // ...
QApplication::instance()->postEvent (myWorkerThread, new MyWorkRequestEvent(/* ... */);
如果我正确地阅读了文档,它指出事件是在拥有事件接收者的对象的线程上处理的。自从QThread
是由主线程创建的,它归主线程所有——那么这个事件会由主线程处理吗(这是违反直觉的,在我的情况下是错误的)?
你的理解是正确的,而且确实很不直观:)
很多麻烦来自于 QThread 的文档,该文档建议对 QThread 进行子类化。尽管Qthread有自己的事件循环,但只有在run()方法(在该线程中创建)中创建的QObject的事件和信号才会在QThread事件循环中处理。
最好将线程逻辑封装在 QObject 子类中,然后将该对象移动到普通 QThread 的实例中。然后,您可以使用信号(将跨线程边界正确排队)或自定义事件与该 QObject 进行通信。
这个里面有一些链接类似的问题 https://stackoverflow.com/questions/4093159/what-is-the-correct-way-to-implement-a-qthread-example-please这应该有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)