Я провел несколько тестов с QueryPerformanceCounter и получил странные результаты.
Кажется, моя простая программа обновляется медленно (около 40 мс), когда ничего не делает, но когда я помещаю RedrawWindow с сообщением RDW_INVALIDATE, она обновляется и работает очень быстро (около 1 мс)
Пожалуйста, посмотрите на примеры:
{...}
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( );
{...}
Когда RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
находится в основном цикле, я могу получить точно 40 мс или даже 5 мс, но без RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
условие if (double (сейчас - начало) / PCFreq> = 40) вводится не быстрее, чем 45-50 мс ....
Мой вопрос:
Как можно избежать функции RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
, но быстро обновлять. Когда я использую RedrawWindow(hwnd, NULL, NULL, RDW_VALIDATE);
, мой интерфейс (кнопки, окна) не отображается.
СПАСИБО!