Информация об изменениях

Сообщение Re[62]: Еще от 30.06.2017 17:18

Изменено 30.06.2017 19:55 c-smile

Re[62]: Еще
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, c-smile, Вы писали:


CS>>Просто добавить там

CS>>
CS>>        else
CS>>        {
CS>>            Render();
CS>>            Sleep(10);  
CS>>        }
CS>>


I>Непонятно. Если это user input тред, то непонятно, откуда сообщения от юзера будут щимиться — поток то спит, то рисует. Можно забрасывать сообщения через таймер и проверять именно их.


Render() в данном конкретном примере работает меньше 1ms. Т.е. Sleep(10); здесь просто гарантирует что Render вызывается не чаше чем 10ms т.е. max FPS = 100.

I>В gdi+ Режиме у скитера такой же луп ? Если такой же и рисование в том же треде, т.е. ui, то это объясняет, почему скитер слабо юзает процессор, хотя в gdi+ он должен забирать всё ядро.


Sciter не содержит message pump loop. Это дело host application.

Просто когда в Sciter что-то изменилось то я зову ::InvalidateRect(). В ответ Windows делает (условно) ::PostMessage(hwnd,WM_PAINT,...);

Частота прихода WM_PAINT есть 60 FPS по умолчанию. Но эта частота зависит от нагрузки.
Если обработка WM_PAINT занимает значительное время, то WM_PAINT начинает приходить реже (что естественно).

Т.е. в GDI+ frame rendering загружает СPU сильно, что вызывает WM_PAINT приходить через раз (условно) и FPS становится ниже.
Тулзы типа ProcessExplorer показывают интегральную загрузку CPU. Т.е. в среднее значение за последнюю секунду или типа того.
Re[62]: Еще
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, c-smile, Вы писали:


CS>>Просто добавить там

CS>>
CS>>        else
CS>>        {
CS>>            Render();
CS>>            Sleep(10);  
CS>>        }
CS>>


I>Непонятно. Если это user input тред, то непонятно, откуда сообщения от юзера будут щимиться — поток то спит, то рисует. Можно забрасывать сообщения через таймер и проверять именно их.


Render() в данном конкретном примере работает меньше 1ms. Т.е. Sleep(10); здесь просто гарантирует что Render вызывается не чаше чем 10ms т.е. max FPS = 100.

I>В gdi+ Режиме у скитера такой же луп ? Если такой же и рисование в том же треде, т.е. ui, то это объясняет, почему скитер слабо юзает процессор, хотя в gdi+ он должен забирать всё ядро.


Sciter не содержит message pump loop. Это дело host application.

Просто когда в Sciter что-то изменилось то я зову ::InvalidateRect(). В ответ Windows делает (условно) ::PostMessage(hwnd,WM_PAINT,...);

Частота прихода WM_PAINT есть 60 FPS по умолчанию. Но эта частота зависит от нагрузки.
Если обработка WM_PAINT занимает значительное время, то WM_PAINT начинает приходить реже (что естественно).

Т.е. в GDI+ frame rendering загружает СPU сильно, что вызывает WM_PAINT приходить через раз (условно) и FPS становится ниже.
Тулзы типа ProcessExplorer показывают интегральную загрузку CPU. Т.е. в среднее значение за последнюю секунду или типа того.

И вообще про GetMessage/PeekMessage : https://blogs.msdn.microsoft.com/oldnewthing/20111219-00/?p=8863