使用 qtimer 和 qthread 的逻辑中的任何缺陷



我有一个使用 pyqt4 开发的 GUI,它有一个运行按钮。 单击运行按钮时,我调用了一个计时器和一个线程。 计时器不断监视线程。 在线程上,我调用命令提示符来执行测试用例。我希望线程在命令提示符打开之前处于活动状态,并希望在关闭命令提示符后将其说为死。

我为此编写的代码如下。有什么逻辑缺陷吗?或者有什么更好的方法来实现这一目标?

self.connect(self.run_button, SIGNAL('clicked()'), self.runscript)
 def runscript(self):
    self.timer = QTimer()
    self.timer.connect(self.timer, SIGNAL("timeout()"),self.sendData)
    self.timer.start(1000) 
def sendData(self):

    if self.run_timer:
        run_monitor_object = RunMonitor()
        print 'Starting the thread...........'
        run_monitor_object.start()
        self.run_timer = False
    if run_monitor_object.isAlive():
        print 'Thread Alive...'
    else:
        print 'Thread is Dead....'
class RunMonitor(threading.Thread):
    def __init__(self, parent=None):
        threading.Thread.__init__(self)
    def run(self):
        print 'Invoking Command Prompt..........'
        subprocess.call(["start", "/DC:\Scripts", "scripts_to_execute.bat"], shell=True)

当我运行这个时,我收到以下错误...

UnboundLocalError:局部变量 'run_monitor_object' 在赋值前引用 if run_monitor_object.isAlive():

只是想知道还能怎么做,我能

此代码:

if self.run_timer:
    run_monitor_object = RunMonitor()
    print 'Starting the thread...........'
    run_monitor_object.start()
    self.run_timer = False
if run_monitor_object.isAlive():
    print 'Thread Alive...'
else:
    print 'Thread is Dead....'

。如果未采用第一个分支(可能在第二次调用中,当self.run_timer已为 True 时),则不会分配run_monitor_object,并且您尝试在第二个if中使用它。

若要使其正常工作,请将run_monitor_thread作为类的实例变量。

另外,为什么要在计时器中启动线程?这只会不必要地使您的逻辑复杂化。创建计时器时启动它。然后,计时器将用于监视它。

最新更新