在QT中在不同的线程中运行一个函数

时间:2010-12-22 06:27:20

标签: qt inheritance qthread

在Qt中,应用程序代码Class A有一个成员方法,如method1()。我想在另一个成员函数method2()中调用此方法,并在另一个线程中运行mehtod1()。但是我从qt文档中发现了以下内容。

  1. class MyThread继承新的QThread(假设)。
  2. 使用所需的代码覆盖函数方法run()
  3. MyThread中创建Class A的对象,然后在任意位置调用run函数。
  4. 但上面看起来有点复杂。 Qt中是否有任何机制,以便我可以在QThread中立即创建新的method1()(无继承)并使用此线程运行method2(),然后返回method1()执行结束后?

    如果我的问题不清楚,请告诉我。

2 个答案:

答案 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”主题)。

针对您的问题,您可以在不同的线程中使用两个单独的对象来“传播”执行。