Ich stehe vor einem Problem, bei dem ich meine Benutzeroberfläche (und das gesamte Betriebssystem) in Multithread-Anwendungen nicht ändern muss.
Ich entwickle eine Anwendung (c ++ und Qt-basiert), die viele Video-Frames gleichzeitig von mehreren Streams empfängt und transformiert.
Jeder Stream wird abgerufen, transformiert und in einem separaten Worker-Thread gerendert (mit DirectX). Das bedeutet, dass ich den Standard-GUI-Thread nicht zum Rendern des Frames verwende.
Auf einem leistungsfähigen Computer habe ich kein Problem, da die CPU alle Daten verarbeiten und Zeit für den GUI-Thread zur Verarbeitung von Benutzeranforderungen behalten kann. Aber auf einem alten Computer, es funktioniert nicht, die CPU wird zu 100% verwendet, um meine Daten zu verarbeiten, und UI verzögert sich, es kann 10 Sekunden dauern, bevor ein Knopfklick verarbeitet wird.
Ich möchte meine Benutzeroberfläche ansprechend halten. Tatsächlich möchte ich, dass mein Worker-Thread nur funktioniert, wenn keine anderen Aktionen ausgeführt werden. Ich habe versucht, die Arbeitsthreadpriorität auf niedrig zu ändern, aber es funktioniert nicht. Ich habe auch einen Schlaf (10) im Arbeiter-Thread versucht, aber weil ich viele Threads haben kann, fallen sie nicht gleichzeitig in den Schlaf, also funktioniert es auch nicht.
Was ist der beste Weg, um in diesem Fall eine Benutzeroberfläche responsiv zu halten (was auch immer das Toolkit verwendet)?
kann meine Kommentare nicht zur obigen Liste hinzufügen, daher muss ich hier meine wenigen Cents hinzufügen:
Eine Sache zu überprüfen - wie Sie Video-Display tun? Stellen Sie sicher, dass die Anzeigefrequenz (Daten von Streams) der Aktualisierungsrate der Grafikkarte entspricht? Wenn Sie Daten zur Anzeige haben, benachrichtigen Sie den Haupt-Thread über die Notwendigkeit, den Bildschirm zu aktualisieren (bessere Lösung) oder erzwingen Sie die Rahmenanzeige von jedem Thread (schlechte Lösung)?
Tags und Links c++ qt user-interface freeze