【问题标题】:Running a function in different thread in QT在 QT 的不同线程中运行函数
【发布时间】:2010-12-22 06:27:20
【问题描述】:

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

  1. QThread 继承一个新的class MyThread(假设)。
  2. 用您需要的代码覆盖函数方法run()
  3. Class A 中创建MyThread 的对象,然后在需要的地方调用run 函数。

但上面的内容似乎有点复杂。 Qt 中是否有任何机制,以便我可以在我的method1() 中立即创建一个新的QThread(不继承)并使用该线程运行method2(),然后在执行完成后返回method1()

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

【问题讨论】:

    标签: qt inheritance qthread


    【解决方案1】:

    是的,有你想要的方式。

    这篇文章将帮助你理解为什么它不是从 QThread 继承的正确方法:https://www.qt.io/blog/2010/06/17/youre-doing-it-wrong

    本文将帮助您了解如何以真正简单的方式使用 QThread:https://www.qt.io/blog/2006/12/04/threading-without-the-headache

    【讨论】:

    • 所以等等,基本上在您提供的第一个链接中,作者告诉我不要从 QThread 子类化,而在第二个链接中,另一位作者告诉我,如果我将 QThread 子类化,Qt 线程是多么容易。我现在有点困惑,但无论如何感谢您的链接;)+1
    • 不完全是。第一篇文章解释了为什么在这种情况下不应该继承 QThread,第二篇文章解释了如何使用 QThread 类而不继承它
    • 对不起,我注意到了。我想这对我来说太早了。感谢您的澄清;)
    • 链接损坏。
    【解决方案2】:

    您可以结合线程使用 QObject 插槽和信号或事件支持。

    基本上,通过信号/槽机制调用的 QObject 的槽在创建 QObject 的线程中执行。您还可以使用 QObject::moveToThread 将对象所有权从一个线程移动到另一个线程。

    您还可以使用 QCoreApplication::postEvent 发布事件以在创建对象的线程中执行。

    在 Qt 文档中查看有关线程和 QObjects 的更多信息(索引中的“线程和 QObjects”主题)。

    解决您的问题,您可以在不同线程中使用两个单独的对象来“分散”执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2021-05-13
      • 2012-09-04
      • 1970-01-01
      • 2014-03-24
      • 2021-09-26
      相关资源
      最近更新 更多