繁体   English   中英

pyqt - 如何确保我的所有计算都在单独的 Qthread 中运行?

[英]pyqt - How do I ensure that all my calculations are running in a separate Qthread?

我一直在阅读有关如何“正确”使用 QThreads 的内容,但我有点困惑。 我一直在阅读,很多人一直在说,创建一个 QThread,但也创建一个 QObject 的工作线程。 然后使用 movetoThread 将 Qobject 移动到 Qthread。

我只是有点困惑,因为我在 stackoverflow 上看到的所有示例都没有真正做到这一点。

如果这是我的代码:

class worker(QThread):
    def __init__(self):
        Qthread.__init__(self)

    def run(self):
        do_work()
        a = 3

    def do_work(self):
        b = 2

        self.emit(SIGNAL("work_done"),b)

class MyApp(QtGui.QMainWindow):
    QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.worker_thread = worker()

        self.connect(self.worker,SIGNAL('work_done'),self.done)

        self.worker_thread.start()

    def done(self,b)

        print "the value from the worker is: " + str(b)

这段代码会使变量ab的分配在与主线程分离的另一个线程中完成吗? 或者这不是真的,因为我的worker_thread对象存在于主线程中?

在另一个线程中运行某些代码的更好方法不是将QThread子类化,而是将实现该其他代码的对象移动到单独的线程中。

在您的情况下,您的worker对象将直接从QObject继承,以便您可以通过信号和插槽跨线程与其通信。 然后创建一个标准的、开箱即用的QThread并将worker QThread移动到它。 如果需要,使用信号/插槽发送工作数据,并在它们准备好时检索其结果。

我认为你的困惑源于这个想法: QThread对象管理一个单独的线程,但对象本身存在于首先创建对象的任何线程中。 例如,在主线程中创建它意味着QThread也在主线程中,但是您的worker对象将在QThread对象管理的线程中(当然,在您将其移动到那里之后)。

查看此帖子以获取更多详细信息和解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM