Ich habe eine Methode, die sowohl von QThreads
und dem Hauptthread aufgerufen wird. Diese Methode kann manchmal eine lange Zeit dauern, um ihre Berechnungen in einer Schleife durchzuführen, also setze ich QCoreApplication::processEvents()
und dies verhindert das Einfrieren der GUI. Irgendwann hatte ich QCoreApplication::processEvents()
für QApplication::processEvents()
geändert, aber das verursachte die GUI zu frieren (ich bin ziemlich sicher, das war was fereezing es, weil ich QCoreApplication::processEvents()
zurück, es nicht wieder eingefroren) Bin ich richtig zu denken, dass Aufruf QApplication::processEvents()
aus dem Haupt-Thread und QThreads können die GUI einfrieren?Sollte ich QCoreApplication :: processEvents() oder QApplication :: processEvents() verwenden?
Antwort
Weder processEvent() sollte nur aufgerufen werden, wenn Sie aktuelle ausstehende Ereignisse verarbeiten müssen. Sie können dies nützlich finden: How to make Qt work when main thread is busy?
Sie werden viel besser aus dem lang laufenden Prozess aus dem Haupt-Thread verschieben, so dass Sie nicht anrufen müssen processEvents()
. Innerhalb dieses langwierigen Prozesses können Sie alle Signale aussenden, die Sie benötigen, damit die GUI genügend Informationen für Aktualisierungen usw. hat. processEvents
ist jedoch normalerweise eine Krücke für ein schlechtes Design.
Ich werde QtConcurrent :: run versuchen. Kann ich dort GUI-Operationen ausführen oder sollte ich noch Signale ausgeben wie für den Fall eines QThreads –
Gui-Operationen können nur im Haupt-Thread ausgeführt werden. QtConcurrent ist eine gute Idee, besonders wenn Sie Ihre Arbeit auf mehrere Kerne verteilen können. –
- 1. Qt QApplication :: processEvents() im benutzerdefinierten Ereignishandler
- 2. processEvents und Memory Leak?
- 3. Wie kann ich die Clojure REPL zusammen mit Qt Jambi verwenden?
- 4. Qt Bluetooth-Server funktioniert nicht mit QCoreApplication
- 5. Verwenden von QApplication :: exec() in einer Funktion oder Klasse
- 6. Sollte ich hier wakeFromNib oder initWithCoder verwenden?
- 7. Sollte ich Typklassen verwenden oder nicht?
- 8. Wann sollte ich Subdomains verwenden oder vermeiden?
- 9. Sollte ich Angular.copy() oder _.clone() verwenden?
- 10. Sollte ich DirectInput oder Windows-Nachrichtenschleife verwenden?
- 11. Wann sollte ich @JoinColumn oder @JoinTable verwenden?
- 12. Sollte ich Klassenvererbung verwenden oder nicht?
- 13. PHP oder Javascript, die ich verwenden sollte
- 14. Sollte ich Threads oder mehrere Prozesse verwenden?
- 15. Sollte ich Pylons oder Pyramid verwenden?
- 16. Sollte ich Int oder UInt16 verwenden?
- 17. Sollte ich Meteor.startup() oder $ (function() {}) verwenden
- 18. Sollte ich Methoden oder konstante Flags verwenden?
- 19. Sollte ich SqlGeometry oder SqlGeography verwenden?
- 20. Sollte ich Pickle oder cPickle verwenden?
- 21. Sollte ich tsd oder typings verwenden?
- 22. Sollte ich rand() oder rand_s() verwenden?
- 23. Sollte ich IB oder Unterklasse verwenden UIView
- 24. therubyracer oder nodejs, welche sollte ich verwenden?
- 25. Sollte ich string.isEmpty() oder "" .equals (string) verwenden?
- 26. sollte ich "Set" oder "Liste" verwenden
- 27. Sollte ich em oder px verwenden?
- 28. Sollte ich eval() oder call_user_func() verwenden?
- 29. Sollte ich WPF-Konverter oder Trigger verwenden?
- 30. Sollte ich Phobos oder Tango verwenden?
Ich werde QtConcurrent :: run versuchen. Kann ich dort GUI-Operationen machen oder sollte ich noch Signale aussenden wie für den Fall eines QThread –
@yan bellavance: Sie sollten Signale aussenden, da es in einem separaten Thread sein wird. Oder du könntest das QFuture-Material benutzen, um die Signale für dich zu erzeugen und zu senden. –