在Qt中,应用程序代码Class A
有一个成员方法,如method1()
。我想在另一个成员函数method2()
中调用此方法,并在另一个线程中运行mehtod1()
。但是我从qt文档中发现了以下内容。
class MyThread
继承新的QThread
(假设)。run()
。MyThread
中创建Class A
的对象,然后在任意位置调用run函数。但上面看起来有点复杂。 Qt中是否有任何机制,以便我可以在QThread
中立即创建新的method1()
(无继承)并使用此线程运行method2()
,然后返回method1()
执行结束后?
如果我的问题不清楚,请告诉我。
答案 0 :(得分:10)
是的,有一种你想要的方式。
本文将帮助您理解为什么它不是从QThread继承的正确方法:http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/
本文将帮助您了解如何以一种非常简单的方式使用QThread:http://blog.qt.digia.com/blog/2006/12/04/threading-without-the-headache/
答案 1 :(得分:3)
您可以使用QObject插槽和信号或事件支持,并结合线程。
基本上,通过信号/槽机制调用的QObject槽在创建QObject的线程中执行。您还可以使用QObject :: moveToThread将对象所有权从一个线程移动到另一个线程。
您还可以使用QCoreApplication :: postEvent在创建对象的线程中发布要执行的事件。
在Qt文档中查看有关线程和QObject的更多信息(索引中的“Threads and QObjects”主题)。
针对您的问题,您可以在不同的线程中使用两个单独的对象来“传播”执行。