Re: Как заставить программу ничего не делать и передать упра
От: Bell Россия  
Дата: 30.06.04 13:51
Оценка: 2 (1)
Здравствуйте, KGB, Вы писали:

"обширные вычисления с графикой" выделяются в отдельный поток. После просчета кадра этот поток извещает основной поток (сообщение, событие — зависит от платформы). Основной поток выводит готовый кадр. Доступ к области, где этот кадр хранится, должен быть синхронизирован.

ЗЫ
Вообще вопрос непосредственно к С++ отношения не имеет.

ЗЗЫ
Воспользуйся поиском — подобные вопросы всплывают довольно часто.
Любите книгу — источник знаний (с) М.Горький
Re: Как заставить программу ничего не делать и передать упра
От: Astaroth Россия  
Дата: 30.06.04 19:24
Оценка: 2 (1)
Здравствуйте, KGB, Вы писали:

По-хорошему — нужно мутить с потоками.
А по-плохому — вроде в *nix была ф-ция sleep(int ms) — по крайней мере я с её помощью "демоны" писал
http://livejournal.com/users/breqwas
Re: Как заставить программу ничего не делать и передать упра
От: Sir Wiz Россия  
Дата: 01.07.04 03:19
Оценка: 2 (1)
Здравствуйте, 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 >>
Как заставить программу ничего не делать и передать управлен
От: KGB  
Дата: 30.06.04 13:42
Оценка: :)
Вообщем то простите за дилетантский вопрос, просто до этого писал вычислительные проги и никогда не сталкивался с проблемой как ничего не делать.
Вообщем описываю задачу: производяться довольно обширные вычисления с графикой:
накладываются изображения друг на друга с учетом полупрозрачностей и т.д... на просчет одного кадра и вывод его в 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.