2010-12-22 48 views
5

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

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

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

如果我不清楚我的问题,请让我知道。

回答

3

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

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

您也可以使用QCoreApplication ::事件后张贴执行事件的对象是在创建线程。

查看更多有关Qt文档中的线程和QObject对象(“线程和QObject对象”索引主题)。

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

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/

+2

所以等待,基本上在你提供的第一个链接中,作者告诉我不要从QThread继承,而在第二个链接中,另一位作者告诉我,如果我继承QThread,Qt线程是多么容易。我现在有点困惑,不过谢谢你的链接;)+1 – Hafnernuss 2013-02-20 07:47:11

相关问题