我尝试使用self.terminate()
在 QThread 类中,还有self.thread.terminate()
在 GUI 类中。我也尝试过放self.wait()
在这两种情况下。但是,会发生两种情况:
1) 线程根本没有终止,GUI 冻结等待线程完成。一旦线程完成,GUI 就会解冻,一切都会恢复正常。
2)线程确实终止了,但同时它冻结了整个应用程序。
我也尝试过使用self.thread.exit()
。没有喜悦。
为了进一步澄清,我试图在 GUI 中实现一个用户中止按钮,它将在任何时间点终止线程的执行。
提前致谢。
EDIT:
这里是run()
method:
def run(self):
if self.create:
print "calling create f"
self.emit(SIGNAL("disableCreate(bool)"))
self.create(self.password, self.email)
self.stop()
self.emit(SIGNAL("finished(bool)"), self.completed)
def stop(self):
#Tried the following, one by one (and all together too, I was desperate):
self.terminate()
self.quit()
self.exit()
self.stopped = True
self.terminated = True
#Neither works
这是 GUI 类用于中止线程的方法:
def on_abort_clicked(self):
self.thread = threadmodule.Thread()
#Tried the following, also one by one and altogether:
self.thread.exit()
self.thread.wait()
self.thread.quit()
self.thread.terminate()
#Again, none work
来自 QThread::terminate 的 Qt 文档:
Warning:此功能很危险,不鼓励使用。这
线程可以在其代码路径中的任何点终止。线程可以是
修改数据时终止。线程没有机会
自行清理,解锁任何持有的互斥体等。简而言之,使用
仅在绝对必要时才使用此功能。
重新考虑您的线程策略可能是一个更好的主意,这样您就可以例如使用 QThread::quit() 来通知线程彻底退出,而不是尝试以这种方式终止线程。实际上,从线程内调用 thread.exit() 应该根据您实现 run() 的方式来实现。如果您想共享线程运行方法的代码,可能会暗示它为什么不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)