PyQt를 사용하여 소프트웨어를 개발하려고하지만 디버그 정보가없는 소프트웨어 충돌이 자주 발생합니다 (종료 코드 0xC0000409 만). 내가 QThread를 사용하고, 나는 이런 시스템을 썼다 :왜 정보없이 PyQt가 작동하지 않습니까? (종료 코드 0xC0000409)
class serialThreadC(QThread):
updateOutBox = QtCore.pyqtSignal(str)
updateStatus = QtCore.pyqtSignal(int)
def __init__(self):
super(serialThreadC, self).__init__()
self.ser = False
self.state = 0
self.serialEnabled = False
def run(self):
while True:
if self.state == -3 or self.state == -2:
if self.SerialEnabled:
self.updatePB(20)
elif self.state == 0:
if self.serialEnabled:
self.updatePB(20)
def ConnDisconn(self):
self.serialEnabled = not self.serialEnabled
def updatePB(self, stat):
self.state = stat
self.updateStatus.emit(self.state)
serialThread = serialThreadC()
serialThread.start()
## sw is a QDialog already loaded
serialThread.updateOutBox.connect(sw.updateOutBox)
serialThread.updateStatus.connect(sw.updateStatus)
sw.PB_ConnDisconn.clicked.connect(serialThread.ConnDisconn)
내가 읽기/run()
또는 ConnDisconn()
에 serialEnabled
을 쓸 때 나는 충돌이있다. 나는 PyQt가 thread-safe가 아니며 잘못된 변수 처리가 내 유형의 충돌을 일으킨다는 것을 알고 있지만 내 코드에 무엇이 잘못된 것인지 이해할 수 없다. 내 생각은 (아마도 잘못된) 모든 serialThread
메서드는 동일한 스레드에서 실행되며, GUI (메인 스레드)에 연결되어있는 경우에도 마찬가지입니다. 틀렸어? 같은 방식으로, 나는 serialThread
에서 이벤트를 내보내고 GUI에 연결했지만 결코 문제가되지 않았습니다.
내가 실수 한 것을 볼 수 있습니까? 다른 정보없이 충돌이 발생하면 코드를 디버그 할 수 있습니까? (저는 PyCharm 2017.1.3을 사용합니다).
터미널에서 실행 해 보았습니까? – eyllanesc
그건 사실이야! 맨끝에서 나는 충돌의 원인이있다 : | 그리고 정보가없는 코드를 디버깅하는 데 8 시간을 낭비합니다 ... 이 경우 python은 두 개의 유사한 함수 updatePB (self, stat)와 updatePB (self)의 오버로드를 이해할 수없는 것 같습니다. 내가 그것을 부를 때 2 대신 1 매개 변수. – brazoayeye