2009-04-15 7 views
2

erstmals Poster hier ausgesetzt.Win32 App wird auf Minimieren der Fensteranimation

Ich schreibe eine Multi-Thread-Streaming-Audio-Anwendung in C++ (MSVC) auf Windows XP SP2.

Das Problem, das ich festgestellt habe, ist, dass beim Minimieren/Wiederherstellen von Anwendungen auf der Taskleiste alle Threads in meiner Anwendung ausgesetzt sind, während die Fensteranimation aktiv ist. Dies wirkt sich auf mich aus, da es dazu führt, dass das Audio in meiner Anwendung jedes Mal stottert, wenn ein Fenster minimiert oder wiederhergestellt wird.

Deaktivieren Sie das Kontrollkästchen "Animieren von Fenstern beim Minimieren einer Maximierung" in den Windows/Systemeigenschaften/Erweitert/Leistung "visuelle Effekte, Prozessorzeitplanung,"/Einstellungen/Benutzerdefiniert Registerkarte scheint dieses Problem zu beheben.

Das Anpassen der Priorität meines Prozesses auf "High" und "Realtime" hilft nicht.

Kann jemand helfen, etwas Licht zu diesem Thema zu werfen?

Antwort

3

Diese Animationen oder das Fenster zu malen beim Ziehen um (die ähnlichen Probleme schaffen soll) durchflutet das Fenster Nachricht Cue mit WM_PAINT-Nachrichten und verursachen jedes kleines Widget/control in Ihrem Fenster selbst neu zu zeichnen. Dies kann einen Computer und alle Threads und Prozesse, die darauf ausgeführt werden, vollständig blockieren.

Zwei mögliche Lösungen:

  • Fenster einfrieren, dh alle WM_PAINT Nachrichten wegzuwerfen, während das Fenster Größe ändern/Minimieren/gezogen wird. Sie können dies auch tun mit einer Art von Flag (lockRedraw) oder ähnliches.

    • die Priorität zu ändern wird dir nicht helfen, es könnte sogar das Problem erhöhen, obwohl ich nichts über die Planungsstrategie von wxp kennen.

Edit: vergaß die eigentliche zweite Lösung:

  • verwenden größere Puffer für Ihr Audio. Wenn Sie einen Puffer von vielleicht die Hälfte oder ein volles zweite an die Soundkarte in einem Rutsch passieren kann, sollten Sie unbedingt in einer Multithread-Umgebung auf der sicheren Seite sein

reedit: gut ich übersehen, dass Sie sayd jede Fenster. Lediglich Lösung 2 mit größeren Puffern könnte hier Abhilfe schaffen. Sound-Puffer werden in der Regel in einen Puffer auf der Hardware geworfen, und sobald sie da sind, sollte es kein Problem sein.

Eine andere Möglichkeit kommt in den Sinn: Diese Animationen sind mit Sounds unterlegt. Überprüfen Sie, welche Art von Sound Sie zum Maximieren/Minimieren eingerichtet haben. Schalten Sie das aus und versuchen Sie es erneut

Wenn das Problem weiterhin besteht, kann es an einem schlechten Grafikkartentreiber liegen. Wenn nicht, sehen Sie, ob Ihre Einstellungen (vielleicht directSound? Nicht bekannt) alle in Ordnung sind.Vielleicht gibt es einen Ressourcenkonflikt, den Sie codieren können. (Nicht im Hardware-Manager, aber in Ihrer Art, auf das Audiogerät zuzugreifen.)

+0

ok. Die letzte Bearbeitung kommt als Kommentar: Ich habe mich gerade daran erinnert, dass die Sounds unabhängig von der Animation abgespielt werden, und du hast gesagt, es funktioniert dann. Bringen die Animationen Ihre CPU in Schwung? – AndreasT

+0

Die zweite Lösung scheint wahrscheinlicher zu sein. (Spy ++ zeigte etwa 3-6 Paint-Nachrichten pro Minute/Wiederherstellung) Ja, ich verwende dsound/software buffers. Größere Audiopuffer helfen, aber das Problem ist, dass die anderen Threads, die das Audio an dsound liefern, ausgesetzt werden - Übertragung von Echtzeit-Voice. –

+0

Nein. Die CPU ist während Windower-Animationen inaktiv. –

Verwandte Themen