Splitter Windows aktualisieren sich nicht gleichmässig



  • Hallo!

    Mein Programm besitzt 4 Splitter windows, die eine OpenGL Szene aus unterschiedlichen Ansichten darstellt. Jedes Mal, wenn die onMouseMove-Methode eines dieser Fenster aufgerufen wird, sollen Berechnungen abhängig von der gegenwärtigen Mausposition durchgeführt werden.

    Nach Abschluss der Berechnungen sollen dann alle vier Fenster aktualisiert werden, in ihnen befindet sich die OpenGL - Darstellung einer Szene. Anscheinend dauern aber entweder die Berechnungen zu lange (es müssen teilweise von bis zu 1000 Matrizen die Pseudoinversen berechnet werden (sind allerdings recht kleine, dies geschieht mittels Singulärwertzerlegung) oder sie sind so schnell, dass durch das ständige Aufrufen der invalidate-Methoden der einzelnen Fenster ein Problem auftritt.

    Das erste Fenster wird noch flüssig aktualisiert, dass nächste nur ab und an und bei den anderen tut sich teilweise gar nichts. Hab auch mal eine Zählvariabel in der OnDraw-Methode eingebaut, diese unterscheidet sich dann bei extremer Prozessorbelastung, ansonsten werden alle Fenster gleichmässig aktualisiert.

    Spasseshalber habe ich mal eingebaut, dass nur bei jedem 4. Aufruf der OnMouseMove-Methode etwas getan wird, dann läuft es relativ flüssig in allen Fenstern. Aber gibt es da nicht eine schönere Methode, um alle Fenster zu aktualisieren?

    Vielen Dank schon mal für die Hilfe, wäre echt prima wenn ihr eine Lösung finden könntet. Ist für meine Diplomarbeit, also nicht ganz unwichtig... 😉

    Basti


  • Mod

    Die Invalidates kommen zu schnell vermute ich mal. Die WM_PAINT Nachrichten werden nicht gesendet, da bereits die nächste Input Nachricht (Maus etc.) da ist. Setzt Du auch noch Timer ein?
    Du könntest das ganze Anzeigen mit einem UpdateWindow Aufruf, nach dem Invalidate erzwingen. Dann wirst Du sehen wie lange Dein Zyklus wirklich dauert, denn UpdateWindow kehrt dann erst zurück wenn alles gezeichnet ist.
    Folge könnte sein, dass die Applikation zu ruckartig läuft.

    Man könnte versuchen die Berechnung und die Anzeige zu entkoppeln (2 Threads). Folge wird aber bei langer Berechnungsdauer im ein Ruckeln sein.



  • Hi!

    Ja, Timer werden ab und an auch eingesetzt, allerdings nicht, wenn dieses Problem auftritt. Das mit dem UpdateWindow werd ich mal versuchen, vielen Dank für den Tipp! 👍



  • Hat funktioniert, danke! Die Darstellung wird zwar nicht mehr allzu schnell visualisiert bzw. die Position hinkt der des Mauszeigers immer etwas hinterher, aber wenigstens ist die Darstellung jetzt flüssig.


Log in to reply