나는 PyQt4를 사용하여 Lights Out Board (Wiki)를위한 간단한 GUI를 작성하고있다. GUI에는 반복 심화 깊이 검색을 사용하는 'Solve'버튼이 있습니다. 이것은 시간이 오래 걸리며, 퍼즐을 풀고 GUI가 반응하는 동안 완료 될 때 게시판을 업데이트하기 위해 새로운 QThread를 생성합니다. 이 일은 할 수 있습니다.QPushButton을 눌렀을 때 QThread의 실행을 일시 중단하는 방법은 무엇입니까?
그러나 'Stop'버튼이있어 검색 스레드가 현재 실행 중이고 exit()를 사용하여 QThread를 중지 할 수없는 경우 중지해야합니다. 다음은 세 가지 기능에 대한 코드입니다. 나는 '정지'버튼을 클릭하면
class LightsOut(QWidget):
def __init__(self, parent=None):
# Whole other initialization stuff
self.pbStart.clicked.connect(self.puzzleSolver) # The 'Start' Button
self.pbStop.clicked.connect(self.searchStop) # The 'Stop' Button
def searchStop(self):
if self.searchThread.isRunning():
self.searchThread.exit() # This isn't working
self.tbLogWindow.append('Stopped the search !') # This is being printed
else:
self.tbLogWindow.append('Search is not running')
def searchFinish(self):
self.loBoard.setBoard() # Redraw the lights out board with solution
def puzzleSolver(self):
maxDepth = self.sbMaxDepth.value() # Get the depth from Spin Box
self.searchThread = SearchThread(self.loBoard, self.tbLogWindow, maxDepth)
self.searchThread.finished.connect(self.searchFinish)
self.tbLogWindow.append('Search started')
self.searchThread.start()
는 로그인 창 (QTextBrowser), 내가 볼 수에서 메시지 '검색을 중지',하지만 내 CPU는 여전히 100 % 실행하고 검색은 완료 할 때 솔루션이 표시됩니다 (searchFinish가 호출 됨). 분명히, 나는 아주 간단한 것을 잃어 버렸고, 문서에서 눈살을 찌푸린 것처럼 terminate()를 사용하지 않았다.
감사합니다. 종료하십시오. 두 번째 해결 방법은 잘 테스트 된 코드의 다른 부분을 편집해야하기 때문에 현명한 선택이 아닌 것처럼 보이며 모듈의 커플 링도 증가시킵니다. – 0x777
내 솔루션이 도움이 되었다면, 정답을 표시 할 수 있습니다. – lukad