首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

线程 有办法停止Run继续执行吗

2013-07-21 
线程 有办法终止Run继续执行吗我使用QThread的run来执行程序,QThread :class ProcessThread(QtCore.QObjec

线程 有办法终止Run继续执行吗
我使用QThread的run来执行程序,
QThread :


class ProcessThread(QtCore.QObject):

    def __init__(self, func, argv):
        super(ProcessThread, self).__init__()
self.func = func
    self.argv = argv

    def run(self):
self.func(*self.argv)

我在GUI主界面类里定义一个函数 process,

def process(self):
    try:
        函数1  # 函数1包括捕捉错误,捕捉到错误时,发送错误并退出往下执行
        函数2  # 函数2包括捕捉错误,捕捉到错误时,发送错误并退出往下执行
        函数3  # 函数3包括捕捉错误,捕捉到错误时,发送错误并退出往下执行
    except:
      emit('Error...')

发送错误后,定义一个函数终止程序继续执行:

def runError(self)
    self.processThread.terminate()   # 程序执行到这界面就失去响应

然后在GUI界面里调用QThread,

self.processThread = ProcessThread(self.process, ())
self.processThread.start()

请问各位如何定义函数runError? 或者有其它思路不?
QThread
[解决办法]
引用:
请问各位如何定义函数runError? 或者有其它思路不?

你不已经定义好了吗?捕捉到异常就结束线程。
[解决办法]
我记得terminate()是不能“强行”终止进程的,因为这是“不好”的做法。
你这个也不用杀进程吧?设置一个标志位,在process()里检查这个标志位,如果为真返回不就好了?
函数1,2,3在做什么?没用管道什么的吧?
[解决办法]
引用:
Quote: 引用:

我记得terminate()是不能“强行”终止进程的,因为这是“不好”的做法。
你这个也不用杀进程吧?设置一个标志位,在process()里检查这个标志位,如果为真返回不就好了?
函数1,2,3在做什么?没用管道什么的吧?


process()里面的函数没有用到管道, 比如说函数1是登录设备,如果登录发生异常(设备ping不通,密码不正确等等),就emit错误信息,并且退出,不需要继续执行. 现在卡在这里,当发生错误,如何退出run()

函数1,2,3中的异常能被process()的try...except捕获吗?
如果能,那run()就随着异常而退出了,不需要你再终止run()。


如果不能,你可以给函数1,2,3设置个返回值(成功0,失败-1),判断一下,-1就退出run()
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

我记得terminate()是不能“强行”终止进程的,因为这是“不好”的做法。
你这个也不用杀进程吧?设置一个标志位,在process()里检查这个标志位,如果为真返回不就好了?
函数1,2,3在做什么?没用管道什么的吧?


process()里面的函数没有用到管道, 比如说函数1是登录设备,如果登录发生异常(设备ping不通,密码不正确等等),就emit错误信息,并且退出,不需要继续执行. 现在卡在这里,当发生错误,如何退出run()

函数1,2,3中的异常能被process()的try...except捕获吗?
如果能,那run()就随着异常而退出了,不需要你再终止run()。
如果不能,你可以给函数1,2,3设置个返回值(成功0,失败-1),判断一下,-1就退出run()


process里面的try也是可以捕捉到异常的,只是函数1抛了一次,process外面又抛出一次,两次.

我昨晚也在想只能在函数1,2,3里设置返回值这个办法,然后在process里判断. 现在还没有空去改,忙其它事情. 谢谢啦.

我觉得线程不必终止,run()异常退出后,emit一个信号,把异常信息显示在GUI上,或弹窗提示。你可以再次按下button启动thread.start(),不用去new一个了

热点排行