Ich hatte mal das Problem, dass in einem loop der 100 mal das selbe Fenster neu zeichnen soll, das Fenster erst am Ende vom loop neu gezeichnet wird, weil die Message erst verarbeitet wird, wenn der loop durch ist.
Daraufhin hat mir jemand hier folgenden Tipp gegeben:
Damit dies aus jeder beliebigen Funktion heraus geht, habe ich das HWND vom MainWindow global gemacht, und erstmal keine Probleme, lief alles sauber.
Jetzt habe ich mein Programm etwas erweitert, es gibt jetzt timer und threads, die im Hintergrund werkeln, aber nichts, was das Fenster neu zeichnen würde, sollte sich also nicht ins Gehege kommen.
Dazu gibt es jetzt einen weiteren loop, der 4 mal hintereinander MyFunction() aufruft und der läuft nicht sauber.
Ich kann es nicht exakt reproduzieren, weil es nicht jedesmal passiert, aber so etwa jedes dritte Mal, wenn ich mache:
dann kommt von PeekMessage nur noch die Hälfte an, sprich er zeichnet das Fenster zwar immer wieder neu, aber statt 100 mal, nur 80 mal oder noch weniger.
Ich habe schon alles mögliche probiert, mit MessageBox() oder separatem debug-Fenster im Ablauf alle möglichen Variablen anzeigen lassen, aber da scheint immer alles ok zu sein.
Dabei tritt der Fehler um so häufiger auf, je weniger er für den Fensterinhalt berechnen muss, sprich je kürzer und damit schneller der loop läuft, desto öfter fehlen ein paar Peek´s.
Hat jemand eine Idee woran das liegen könnte, oder wie ich dem Fehler auf die Spur kommen könnte?
Daraufhin hat mir jemand hier folgenden Tipp gegeben:
Code:
void MyFunction()
{
MSG msg;
for(int i = 0; i < 100; i++)
{
// berechne neuen Inhalt
// und das rect was neu zu zeichnen ist
InvalidateRect(MyChild,&rect,false);
// jetzt die Message verschicken, bevor der loop neu durchläuft
while(PeekMessage(&msg, hwnd, 0, 0, PM_NOREMOVE))
{
GetMessage(&msg, hwnd, 0, 0 );
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
return;
}
Damit dies aus jeder beliebigen Funktion heraus geht, habe ich das HWND vom MainWindow global gemacht, und erstmal keine Probleme, lief alles sauber.
Jetzt habe ich mein Programm etwas erweitert, es gibt jetzt timer und threads, die im Hintergrund werkeln, aber nichts, was das Fenster neu zeichnen würde, sollte sich also nicht ins Gehege kommen.
Dazu gibt es jetzt einen weiteren loop, der 4 mal hintereinander MyFunction() aufruft und der läuft nicht sauber.
Ich kann es nicht exakt reproduzieren, weil es nicht jedesmal passiert, aber so etwa jedes dritte Mal, wenn ich mache:
Code:
for(int i = 0; i < 4; i++)
{
MyFunction();
}
dann kommt von PeekMessage nur noch die Hälfte an, sprich er zeichnet das Fenster zwar immer wieder neu, aber statt 100 mal, nur 80 mal oder noch weniger.
Ich habe schon alles mögliche probiert, mit MessageBox() oder separatem debug-Fenster im Ablauf alle möglichen Variablen anzeigen lassen, aber da scheint immer alles ok zu sein.
Dabei tritt der Fehler um so häufiger auf, je weniger er für den Fensterinhalt berechnen muss, sprich je kürzer und damit schneller der loop läuft, desto öfter fehlen ein paar Peek´s.
Hat jemand eine Idee woran das liegen könnte, oder wie ich dem Fehler auf die Spur kommen könnte?