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

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

Торможение DelphiX приложений под WindowsXP


3d[Power] ©   (2003-04-10 19:19:00) 

Есть такая проблема, при использовании DXTimer, с интервалом 20 (50fps) в хп все это проседает до 32fps. Если таймер заменить на свой thread, то все ок, но это не помогает для оконных delphix программ.

Собственно вопрос: как ускорить (вернуть нормальную скорость (50fps)) оконным delphix приложениям под WinXP?


Мор   (2003-04-13 03:34:00) [1]

А у меня так: если поставить интервал 0 - идут тормоза, а если 1 или выше - то скорость соответствует!


Psibug   (2003-04-11 13:55:00) [2]

Сам свидетель того, о чём спрашиывает Повер - на машине друга это происходит. Это не просто 32 кадра вместо 50: всё как то плавно, медленно, словно в замедленном replay"е. Но нет мерцания экрана или чего-то вроде этого. может введёшь команду setiterationlength 1<Value<20 ,DefaultValue=20 и с помощью этой команды будут регулировать интервал таймера те, вроде этого несчастного, у кого эта трабла?
Любой неизвращённый таймер использует SetTimer/KillTimer.
А навороченые могут и свой поток создавать.
DXTimer, наверное тоже навороченый. VCLовский таймер использует для создаваемых таймеров создаваемыемые HWND (идентификаторы окон: 1 таймер - 1 окно).
>Dartman
Согласен насчёт таймеров. Но стиль надо соблюдать (это я о блендинге). Да и вообще, помоему, в NFK блендинг можно через консоль вырубить или через конфиг.
>АФ
Нельзя ставить таймер на 0. Это любые винды <censored>.См. ниже

Вот как обновляются свойства VCLовского таймера:

KillTimer(FWindowHandle, 1);
if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
raise EOutOfResources.Create(SNoTimers);


По моему, надо было тебе, Повер, использовать while и Sleep (то. что я писал об этой процедуре в конференции winapi - это ошибка. Просто скорость работы OpenGL от одной машины к другой разнится более, чем у Direct3D).


АФ   (2003-04-11 09:15:00) [3]

У меня еще хуже. Интервал в DXTimer установлен в 0. На некоторых ХР возникают очень сильные тормоза. Буквально 1fps. Это при том что компьютеры мощные с хорошими ускорителями.

Как побороть ?


Darthman   (2003-04-10 19:50:00) [4]

И вообще, я бы поостерегся от использования всякого рода таймеров в игрушках. Неправильно это все.


Darthman   (2003-04-10 19:47:00) [5]

Например отказаться от альфаблендинга.


Наверх

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