Нативные приложения - снятие нагрузки?
 Добавлено: 15.08.2020 21:55:15
Добавлено: 15.08.2020 21:55:15Всем привет. Наверняка многим известно, что я занимаюсь доработкой ZenGL и я давно ещё искал путь ограничения ФПС, ещё задолго до того как начал заниматься самим ZenGL.
И вот, разбираясь что к чему и получив ограничение которое искал, я обнаружил, что очень сильно стал загружаться процессор, аж до 25%... в чём же дело? И стал ковырять код дальше, сначала подумав, что может где-то не то наковырял...
Так вот, слишком долгое вступление. 
 
Описываю внутренний цикл, в котором идёт опрос самой системы PeekMessageW и зачастую после этого опроса заставляют работать саму программу.
Итак, опросили систему и запустили свой цикл
Я не знаю, знают об этом или нет, но я ни где не видел, чтоб так можно было разгрузить систему. Получается, если мы не прорисовываем ни чего, то заставляем процессор выждать милисекунду.
Это вообще правильно?
P.S. нашёл ошибку, исправил )))) в том коде что выложил.
P.P.S. Касается в основном Windows.
			И вот, разбираясь что к чему и получив ограничение которое искал, я обнаружил, что очень сильно стал загружаться процессор, аж до 25%... в чём же дело? И стал ковырять код дальше, сначала подумав, что может где-то не то наковырял...
Так вот, слишком долгое вступление.
 
 Описываю внутренний цикл, в котором идёт опрос самой системы PeekMessageW и зачастую после этого опроса заставляют работать саму программу.
Итак, опросили систему и запустили свой цикл
- Код: Выделить всё
- var
 newTime, oldTime: Double;
 maxFPS: single = 1000 / 30; // 30 FPS - ограничиваем
 ...
 if winON then
 begin
 if PeekMessage(...) then
 begin
 TranslateMessage(msg);
 DispatchMessage(msg);
 end
 else begin // основной опрос вашей программы
 newTime := GetTickCount;
 // выставляем (проверяем) ограничение
 if newTime >= oldTime + maxFPS then
 begin
 Draw(); // стандартная работа программы
 oldTime := oldTime + maxFPS;
 ...
 end
 // и вот тут код, который вдруг разгружает систему почти в нуль,
 else
 Sleep(1);
 end;
 end;
 ...
Я не знаю, знают об этом или нет, но я ни где не видел, чтоб так можно было разгрузить систему. Получается, если мы не прорисовываем ни чего, то заставляем процессор выждать милисекунду.
Это вообще правильно?
P.S. нашёл ошибку, исправил )))) в том коде что выложил.
P.P.S. Касается в основном Windows.