在 QT 的不同线程中运行函数
Posted
技术标签:
【中文标题】在 QT 的不同线程中运行函数【英文标题】:Running a function in different thread in QT 【发布时间】:2010-12-22 06:27:20 【问题描述】:在 Qt 应用程序代码中,Class A
有一个成员方法,例如 method1()
。我想在另一个成员函数method2()
中调用此方法并在不同的线程中运行mehtod1()
。但是我从 qt 文档中找到的内容如下。
-
从
QThread
继承一个新的class MyThread
(假设)。
用您需要的代码覆盖函数方法run()
。
在Class A
中创建MyThread
的对象,然后在需要的地方调用run 函数。
但上面的内容似乎有点复杂。 Qt 中是否有任何机制,以便我可以在我的method1()
中立即创建一个新的QThread
(不继承)并使用该线程运行method2()
,然后在执行完成后返回method1()
?
如果我的问题不清楚,请告诉我。
【问题讨论】:
【参考方案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”主题)。
解决您的问题,您可以在不同线程中使用两个单独的对象来“分散”执行。
【讨论】:
以上是关于在 QT 的不同线程中运行函数的主要内容,如果未能解决你的问题,请参考以下文章