Вообщем то простите за дилетантский вопрос, просто до этого писал вычислительные проги и никогда не сталкивался с проблемой как ничего не делать.
Вообщем описываю задачу: производяться довольно обширные вычисления с графикой:
накладываются изображения друг на друга с учетом полупрозрачностей и т.д... на просчет одного кадра и вывод его в BackBuffer и потом вывод на экран — около 5-6мс. вообщем-то получается на полной скорости выдается 160-200 FPS... и полностью неуправляемое окно вывода... окно не двигается и не закрывается... когда вычисления заканчиваются, и он просто SWAPит два последних кадра на экране — окно контролируется: Resize... Move... Close... попытку сделать Thread::Sleep(34) /* чтобы до 40мс или 25fps довести */ нагрузка на проц падает, но все равно MouseCursor — waiting... окно не двигается и не закрывается.
Помогите... как сделать так, чтобы в перерыве между подсчетами кадров программа ничего не делала, отдавала ресурсы кому угодно и по таймауту выводила новые данные на экран и после этого только приступала к подсчету следущего кадра
Заранее спасибо
02.07.04 23:13: Перенесено модератором из 'C/C++' — WolfHound
Здравствуйте, KGB, Вы писали:
По-хорошему — нужно мутить с потоками.
А по-плохому — вроде в *nix была ф-ция sleep(int ms) — по крайней мере я с её помощью "демоны" писал
Здравствуйте, KGB, Вы писали:
KGB>Помогите... как сделать так, чтобы в перерыве между подсчетами кадров программа ничего не делала, отдавала ресурсы кому угодно и по таймауту выводила новые данные на экран и после этого только приступала к подсчету следущего кадра
Запускать просчёт кадров по MultiMedia Timer? timeSetEvent(....), etc...
В перерывах между вызовами ваше окно будет полностью отдано во власть пользовательско-системных сообщений.
NB: Только не забывайте, пожалуйста, что в callback процедуре MMTimer-а нельзя вызывать ничего, кроме
Applications should not call any system-defined functions from inside a callback function, except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
Иначе вас постигнет жесткое разочарование, не будет денег и собака уйдёт к соседям.
ИМХО имеет смысл вызывать только PostMessage, посланое сообщение ловить в оконной процедуре и по поимке запускать рендеринг.
... << RSDN@Home 1.1.3 stable >>