Ich habe einige Tests mit QueryPerformanceCounter durchgeführt und seltsame Ergebnisse erhalten. Es scheint, dass mein einfaches Programm erfrischt langsam (ca. 40ms), wenn es nichts tut, aber wenn ich RedrawWindow mit RDW_INVALIDATE Nachricht setzen es aktualisiert und arbeitet sehr schnell (ca. 1ms)
Bitte sehen Sie sich die Beispiele an:
{...}
double PCFreq = 0.0;
__int64 now = 0, start = 0;
LARGE_INTEGER li;
PCFreq = double(li.QuadPart)/1000;
AllocConsole( );
freopen("CONOUT$", "wb", stdout);
double delay;
while (GetMessage (&messages, NULL, 0, 0))
{
QueryPerformanceCounter(&li);
now = li.QuadPart;
if ( double(now - start) / PCFreq >= 40)
{
**// painting !!!**
cout << double(now - start) / PCFreq << "\n";
start = now;
}
// !!!!!!
**RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);**
TranslateMessage(&messages);
DispatchMessage(&messages);
}
FreeConsole( );
{...}
Wenn die RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
ist, kann ich in der Hauptschleife genau 40ms oder sogar 5ms erreichen, aber ohne RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
die Bedingung if ( double(now - start) / PCFreq >= 40) wird nicht schneller als 45-50 ms eingegeben....
Meine Frage ist: Wie kann ich vermeiden RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
Funktion, aber halten Sie die schnelle Auffrischung. Wenn ich verwende RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
meine Schnittstelle (Tasten, Windows) nicht anzeigt.
DANKE!