J'ai écrit un programme graphique dans PyQt sous Windows. Il y a des opérations coûteuses dans mon programme. Pendant que ces opérations sont en cours, le programme affiche "Ne répond pas" dans la barre de programme.QThread Windows ne répond pas
Je pense que cela doit être cette opération bloquer le thread principal pour mettre à jour l'interface utilisateur, donc j'écris du code multi-threading par QThread pour le tester, il n'a toujours pas de sens.
j'ai écrit un petit programme pour le tester, l'opération n'a pas couru dans le nouveau fil à tous, voici mon petit code de test:
from PyQt5.QtCore import QThread, QObject, QCoreApplication, qDebug, QTimer class Worker(QObject): def on_timeout(self): qDebug('Worker.on_timeout get called from: %s' % hex(int(QThread.currentThreadId()))) if __name__ == '__main__': import sys app = QCoreApplication(sys.argv) qDebug('From main thread: %s' % hex(int(QThread.currentThreadId()))) t = QThread() qDebug(t) worker = Worker() timer = QTimer() timer.timeout.connect(worker.on_timeout) timer.start(1000) timer.moveToThread(t) worker.moveToThread(t) t.start() app.exec_()
Voici la sortie:
From main thread: 0x634 Worker.on_timeout get called from: 0x634
Avez-vous essayé ma réponse? Si vous l'avez trouvé utile, veuillez le marquer comme accepté (c.-à-d. Cliquer sur le symbole de la coche). – ekhumoro