J'essaie de développer un logiciel avec PyQt, mais je suis souvent bloqué sur les plantages logiciels sans informations de débogage (seulement le code de sortie 0xC0000409). J'utilise QThread, et j'ai écrit un système comme celui-ci:Pourquoi PyQt se bloque sans information? (code de sortie 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)
Je plante lorsque je lecture/écriture serialEnabled
dans run()
ou ConnDisconn()
. Je sais que PyQt n'est pas thread-safe et qu'une mauvaise manipulation des variables donne des accidents de mon type, mais je ne peux pas comprendre ce qui ne va pas avec mon code. Mon idée (peut-être fausse) est que toutes les méthodes serialThread
sont exécutées sur le même thread, même si elles sont connectées à un gui (thread principal). Est-ce faux? De la même manière, j'émets des événements de serialThread
et je les ai connectés à l'interface graphique, mais cela ne m'a jamais posé de problèmes.
Pouvez-vous voir l'erreur que j'ai faite? Y at-il un moyen de déboguer le code s'il y a un crash sans autres infos? (J'utilise PyCharm 2017.1.3).
Avez-vous essayé de démarrer à partir du terminal? – eyllanesc
C'est vrai! Dans le terminal, j'ai la cause de l'accident: | Et je gaspille comme 8hours pour déboguer un code sans informations ... Dans ce cas, il semble que python ne peut pas comprendre la surcharge que j'ai fait de deux fonctions similaires updatePB (self, stat) et updatePB (self), pleurer parce que j'ai donné 2 paramètres au lieu de 1 quand je l'appelle. – brazoayeye