为什么QThread只打印两个线程调用中的一个?

2024-10-02 18:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

from PySide.QtCore import *
from PySide.QtGui import *
import time as t


class WorkerThread(QThread):
    def _init_(self, mw):
    super(WorkerThread, self)._init_(mw)
    self.gameName = ""

def setGameName(self, currGameName):
    self.gameName = currGameName

def run(self):
    print self.gameName

class GG(object):
workerThread = WorkerThread()
def startThread(self,stringer):
    self.workerThread.setGameName(stringer)
    self.workerThread.start()

harro = GG()
harro.startThread("hello")
harro.startThread("hi")
t.sleep(60)

这只打印“嗨”而不是“你好”。为什么不同时打印?我该怎么改变它,让它同时打印?你知道吗


Tags: fromimportselfinitdefclassmwpyside
2条回答

这个例子非常小,因为线程只做一件事(打印一个字符串),然后退出。如果您真的想并行地启动两个线程,可以修改GG类来跟踪多个线程对象。你知道吗

class WorkerThread(QThread):
    def _init_(self, mw):
        super(WorkerThread, self)._init_(mw)
        self.gameName = ""

    def setGameName(self, currGameName):
        self.gameName = currGameName

    def run(self):
        print self.gameName

class GG(object):
     workerThreads = []

     def startThread(self,stringer):
        self.workerThreads.append(WorkerThread())
        self.workerThreads[-1].setGameName(stringer)
        self.workerThreads[-1].start()

harro = GG()
harro.startThread("hello")
harro.startThread("hi")

startThread的第二个调用取消了第一个调用。线程没有时间打印“hello”,您再次调用它要求打印“hi”。 您可以在QThread.start()之后调用QThread.wait(),等待线程完成。你知道吗

一个工作示例(同样,具有正确的标识):

class WorkerThread(QThread):
    def _init_(self, mw):
        super(WorkerThread, self)._init_(mw)
        self.gameName = ""

    def setGameName(self, currGameName):
        self.gameName = currGameName

    def run(self):
        print self.gameName

class GG(object):
     workerThread = WorkerThread()

     def startThread(self,stringer):
        self.workerThread.setGameName(stringer)
        self.workerThread.start()
        self.workerThread.wait()

harro = GG()
harro.startThread("hello")
harro.startThread("hi")

此示例将在线程运行时冻结用户界面。 所以对于更复杂的任务,应该使用signals和slots机制。你知道吗

相关问题 更多 >