Сообщение Re[62]: Еще от 30.06.2017 17:18
Изменено 30.06.2017 19:55 c-smile
Re[62]: Еще
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, c-smile, Вы писали:
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. Т.е. в среднее значение за последнюю секунду или типа того.
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>>
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
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