Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

application.ProcessMessages [D5, Win2k]


CMOS ©   (2006-05-05 22:09:00) 

Есть ли аналог процедуры DoEvent (из VB) в Delphi?

Инициализирую D3D8
Устанавливаю необходимые параметры,
В цикле
application.ProcessMessages
устанавливаю матрицу вида
Выход когда условие

Проц подлетает под стольник. Даже мышка не шевелится. Снять задачу не возможно - диспетчер не грузится. Винт молчит.
В VB в такой же проге такого не было. DoEvent дает обработать все события, затем продолжает выполнять процедуру.


Cash   (2006-05-13 18:37:00) [1]

CMOS ©   (13.05.06 15:15) [12]:
> Вообще, тему нужно переназвать и перенести

Ты давай лучше сам регься и рули к нам! :)))
Т. е. в конференцию "Игры", там тебе все покажут и расскажут. Может даже
прожуют, и всяко такое! :)))

ЗЫ: а скакой бабушки Dev(IDirect3DDeviceX) должен у какой то там формы
Paint Вызывать??? 8)

Там дело в том, что Paint срабатывает для перерисовки формы, форму
перекрыл - перерисовалось, мышой дернул - перерисовалось, и т. д.


CMOS   (2006-05-13 15:15:00) [2]


> OnIdle событие

А здесь по подробнее

Все нормально, ошибка в коде была. Сам разобрался.
Мне тут посоветовали вместо цикла рисовать все на событие Paint формы. Что-то сомнительно. Должна произойти рекурсия и я просто ничего не увижу. Попробовал. Получилось!!! Даже application.ProcessMessages не нужен. Загрузка проца 3%.
Объясните мне почему. Вот код:

procedure TForm1.FormPaint(Sender: TObject);
begin
D3DXMatrixLookAtLH(MatV, vEye, vAt, vUp);
Dev.SetTransform(D3DTS_VIEW, MatV);
Dev.Clear(0, 0, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,
 0, 1, 0);
Dev.BeginScene;
...
Dev.EndScene;
Dev.Present(0, 0, 0, 0);
end;

После ПОЛНОГО выполнения, процедура повторяется.
По уму если, то Dev.Present(0, 0, 0, 0) должно вызвать событие Paint. Получится рекурсия. Конца не будет.
Вообще, тему нужно переназвать и перенести


Cash   (2006-05-06 21:30:00) [3]

Kolan ©   (06.05.06 20:10) [9]:
> А как зовут тех, кто доп потоки использует :)
[с прищепкой на носу]Типа[/] их зовут продвинутые шкодеры! :)))
Но омжно еще и как Анатолий посоветовал. :)))

ЗЫ: а всевышние видать нас покинули. :)


Anatoly Podgoretsky   (2006-05-06 20:16:00) [4]

Kolan ©   (06.05.06 20:10) [9]
Извращенцы.


Kolan   (2006-05-06 20:10:00) [5]

нормальные шкодеры там делают всю обработку вывода

А как зовут тех, кто доп потоки использует :)


Cash   (2006-05-06 17:39:00) [6]

Ну я просто не рискнул просить всевышних о переносе этой ветки в
конфу "Игры". :)))
Просто понадялся что они сами это сделают, но что то их незаметно в
последнее время. :)

Эй, CMOS, откликнись! Ты там игру чтоль изладить решил? Иль еще чего?


evvcom   (2006-05-06 14:44:00) [7]


> нормальные шкодеры там делают всю обработку вывода
> на экран и ввода с устройств

Не знаю, чего там делают шкодеры. К таковым себя не отношу.

> ведь речь (вроде) идет о D3D

А я думаю, чего это такое "D3D8"? Тогда автору в Игры надо было стучаться...


Cash   (2006-05-06 14:37:00) [8]

> Все - это что? Все
Ну если охота, то я мешать не буду! :)))

А так, ну... эти... нормальные шкодеры там делают всю обработку вывода
на экран и ввода с устройств, ведь речь (вроде) идет о D3D, как я понял
чел с этим какраз и намудрил. :)))


evvcom   (2006-05-06 08:36:00) [9]


> OnIdle событие. В нем и надо вседелать

Все - это что? Все приложение туда запихать? :)


Cash   (2006-05-06 07:28:00) [10]

Ох уж мне эти цыклы, весно с ними маются! :)))

Не в цыкле это надо делать! Если у тебя Application есть, значит есть и
OnIdle событие. В нем и надо все делать, только Done в false ставь, тогда
все будет крутиться с максимальной скоростью. ProcessMessages в OnIdle
не нужен, т. к. (вроде) OnIdle наступает после обработки очереди
сообщений.


Anatoly Podgoretsky   (2006-05-05 22:41:00) [11]

DoEvent приходит а ProcessMessages, полный эквивалент.


Eraser   (2006-05-05 22:20:00) [12]


> CMOS ©   (05.05.06 22:09)


> Проц подлетает под стольник. Даже мышка не шевелится.

так не должно быть какие бы вычисления не производились, при нормальном приоритете процесса и в user mode.
показывай код.


begin...end   (2006-05-05 22:14:00) [13]

Application.ProcessMessages тоже последовательно выбирает все накопившиеся сообщения из очереди и транслирует/диспетчеризует их, после чего возвращает управление.


Наверх

Титульная страница Поиск, карта сайта Написать письмо