Supportnet / Forum / Anwendungen(Java,C++...)
mfc: invalidate zu träge?
Frage
Hallo Experten!
Ich bin dabei ein Prog zu erstellen, dass einen AD-Wandler ausliest. Die Daten sollen kontinuierlich ausgelesen werden und per OnDraw gezeichnet werden. Dazu hab ich in einer Funktion eine Schleife gelegt, welche den AD-Wandler 5 pro Sekunde ausliest. Nach dem Auslesen erzwinge ich immer ein Refresh mit invalidate(). Leider zeichnet die OnDraw immer nur, nachdem die Schleife beendet ist. Ist die invalidate zu träge um 5 in der Sekunde neuzuzeichnen? Oder liegt es daran, das ich 2 views in einem single-document-projekt habe. Wer kann mir weiterhelfen?
viel dank
p.s.: wenn ich nach der Abfrage des AD-Wandlers ein AfxMessageBox aufrufe, wirds immer neu gezeichnet, dummerweise muss ich die Box ja immer wegklicken!
Antwort 1 von Josch
also wenn ich dich richtig verstanden habe, hast du folgendes
while (5 mal) {
lese AD;
invalidate();
}
es wird aber erst neu gezeichnet wenn die schleife abgearbeitet wurde.
das invalidate() setzt den bereich auf ungültig. win32 ruf bei der nächsten gelegenheit ondraw auf. nur solange die schleife abgearbeitet wird, kann keine andere methode aufgerufen werden, dh. dein programm hängt.
abhilfe : du musst in der schleife die windows nachrichten in deinem programm abarbeiten.
versuchs mal so
josch
while (5 mal) {
lese AD;
invalidate();
}
es wird aber erst neu gezeichnet wenn die schleife abgearbeitet wurde.
das invalidate() setzt den bereich auf ungültig. win32 ruf bei der nächsten gelegenheit ondraw auf. nur solange die schleife abgearbeitet wird, kann keine andere methode aufgerufen werden, dh. dein programm hängt.
abhilfe : du musst in der schleife die windows nachrichten in deinem programm abarbeiten.
versuchs mal so
BOOL bRet;
MSG msg;
while((bRet=GetMessage(&msg,NULL,0,0))!=0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
josch

