我嘗試在QThread類中使用self.terminate()
,並在GUI類中使用self.thread.terminate()
。我也嘗試在兩種情況下都使用self.wait()
。但是,有兩種情況發生:如何從GUI應用程序正確終止QThread?
1)線程根本不終止,GUI凍結等待線程完成。一旦線程結束,GUI解凍並且一切恢復正常。
2)該線程確實終止,但同時它凍結了整個應用程序。
我也試過使用self.thread.exit()
。沒有快樂。
爲了進一步闡明,我試圖在GUI中實現一個用戶中止按鈕,該按鈕可以在任何時間點終止線程的執行。
在此先感謝。
編輯:
這裏是run()
方法:
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
注意:self.terminate ===(self.terminated = true),僅此而已。對於所有實現的99%。 – TheHorse
謝謝,但這並不能真正幫助解決問題。 –
只有一種方法可以安全地終止線程 - 讓它完成所有任務。要執行它,你必須在執行艱鉅任務之前檢查thread.terminated。 – TheHorse