5

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

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

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

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

4

2 回答 2

10

是的,有一种你想要的方式。

本文将帮助您理解为什么它不是从 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

于 2010-12-22T08:33:10.207 回答
3

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

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

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

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

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

于 2010-12-22T06:36:54.273 回答