Ich codiere ein Brettspiel in Qt, wo die Computer-KI nach einer Bewegung des Spielers pausieren und eine Weile nachdenken muss. Während es jedoch denkt, scheint der Bildschirm nicht aktualisiert zu werden, bis jede Codezeile ausgeführt wurde. Somit würde der Benutzer auf ein Quadrat klicken, für einige Sekunden nichts passieren sehen und dann plötzlich das Ergebnis seiner Bewegung und des Computers sehen.Erzwingen der Aktualisierung der Qt-GUI
In einem Versuch, das zu beheben, habe ich versucht, einen neuen Thread zu erstellen, auf dem die KI ihren Code ausführt und dann ihr Stück auf der Platine platziert. Manchmal (und das ist sehr inkonsistent) stürzt das Spiel ab, nachdem der Computer einen Zug gemacht hat.
So können ihr entweder:
- Sag mir, wie das Hauptfenster zwingen, seinen Inhalt zu aktualisieren
- Hilf ich versuchen, das Krachen Problem zu debuggen (Ich bin völlig neu für Themen)
BEARBEITEN - Ich habe versucht, Haltepunkte als Suszterpatt vorgeschlagen, und das Programm scheint im Debugger konsistent abstürzen (es war nicht bevor ich die Haltepunkte gesetzt).
Anyways, als ich durch das Programm Schritt, so scheint es, durch die run
Funktion gut zu gehen, bis sie die Endung Klammer erreicht, und dann, wenn ich durch sie Schritt springt in Zeile 317 auf qthread_win.cpp
, die nur sagt
finish(arg); //line 317
return 0;
Wenn ich durch diese Zeile gehe, friert der Debugger ein und Qt warnt mich nach 20 Sekunden. Wenn ich fortfahre, bekomme ich die Meldung "Diese Anwendung hat die Runtime angefordert, um es auf ungewöhnliche Weise zu beenden", die ich erhalte, wenn das Programm gelegentlich abstürzt, wenn ich nicht debugge.
Was soll ich jetzt tun?
Sie sollten bei der Erstellung eines separaten AI-Threads bleiben. Debugging sollte nicht * zu * schwer mit nur 2 Threads sein, besonders wenn Sie bereits wissen, wo die Abstürze auftreten: Sie können wahrscheinlich einige Breakpoints plumpsen und sehen, welche als letzte ausgeführt wird, und dann von dort aus eingrenzen. – suszterpatt
@susz in Ordnung, aber ich bin mir nicht sicher, wo die Abstürze auftreten. Going to going setting breakpoints in qt ... – wrongusername