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)
这只会打印“hi”而不是“hello”。为什么不打印两者?我将如何更改它以便同时打印两者?
最佳答案
对 startThread
的第二次调用取消了第一次。该线程没有时间打印您再次调用它要求打印“hi”的“hello”。
您可以在 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")
此示例将在线程运行时卡住用户界面。 所以对于更复杂的任务,你应该使用信号和槽机制。
关于python - 为什么 QThread 只打印两个线程调用之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28690578/