Updatefehler im Millisekundenbereich



  • Hi Leute,

    ich schreibe gerade an 'nem Dialog, der zwei Zeichenketten kurz nacheinander anzeigt. Zwischen den beiden Zeichenketten wird ein Bitmap für eine Zeitspanne <=6ms eingeblendet. Hierfür verwende ich folgende Funktionen.

    ctr_bmp.ShowWindow(TRUE);
    ctr_bmp.SendMessage(WM_PAINT, 0, 0);
    ctr_bmp.ShowWindow(FALSE);
    ctr_bmp.SendMessage(WM_PAINT, 0, 0);
    

    Doch leider läuft das ganze sehr unregelmäßig. In einigen Durchgängen wird das Bitmap zu lange angezeigt, in anderen hat es den Anschein als würde es gar nicht am Bildschirm angezeigt werden. Als Timer setze ich die Funktion QueryPerformanceFrequency() ein, die eigendlich sehr genau ist. Bei der Funktion SendMessage dürfte es eigendlich auch keine Probleme geben, da diese die WindowProc direkt aufruft und erst "zurück kehrt" nach dem die Message bearbeitet wurde. Oder liege ich da verkehrt? Die Prio des Prozesses auf Echtzeit zu setzen lieferte auch kein Akzeptables Ergebnis. Gibt es sonst noch eine Möglichkeit ein annähernd 99%tiges Update des Screens zu erreichen?



  • Siehe 'Preemptives Multitasking'



  • Nachtrag:
    Hab ganz vergessen, zu erwähnen, dass mit einem Bildschirmupdate von <= 6ms Deine Bildwiederholfrequenz fast 170Hz betragen müsste.



  • Erst mal fettes Mercy für die Hilfe.
    Ich habe die Parameter (Einblenddauer der Strings)aus Vorgaben eines anderen psychologischen Versuchs übernommen. Hierbei geht es um das Einblenden von sogenannten Primes in einer Zeitspanne, die der Probant nur durch das Unterbewußtsein wahrnimmt. Die Zeit liegt bei 33ms. Mit reinen Strings funktioniert das einwandfrei. Doch bei Bitmaps sind die 33 ms zu lang und es ist klar erkennbar. Daher habe ich die Zeit runtersetzen müssen. Am Anfang dachte ich es wäre nur ein Problem der MessageQueue von Windows (Updaten des Bildschirms), an die Bildwiederholfrequenz habe ich noch gar nicht gedacht. Momentan läuft das Tool mit einer Rate von ca. 8% an nicht eingeblendeten Bitmaps und beim Überdenken des ganzen glaube ich, dass dies das Optimum ist was man rausholen kann.


Anmelden zum Antworten