Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Direct3D приложение зависает


Автор: Joyer 13.1.2009, 15:12
Здравствуйте!
Вопрос по отладке приложений. Я написал Direct3D-шный screensaver. 
Все работает стабильно, но иногда приложение зависает. Не могу найти закономерности. 
Суть программы в показе примитивного слайд-шоу. Работает с одними и теми же файлами.
Изображения для слайд-шоу загружаются в отдельных потоках, потом синхронизируются, потом загружаются в текстуры.
Проверял process explorer-ом на предмет утечки памяти. Объем занимаемой памяти не увеличивается,
но постоянно растет page faults.
Я не очень опытный в вопросе работы с DirectX, возможно я неправильно освобождаю текстуры или что-нибудь еще…
Бывают ли утечки видео памяти? Если да, то как их проверить? Нужно ли освобождать текстуру и спрайт перед каждой загрузкой нового изображения?

Извините за изобилие вопросов, просто теряюсь в догадках. Основной вопрос: как найти ошибку?
Заранее благодарен,
Дмитрий.

Автор: Alexeis 13.1.2009, 15:39
  Если используются потоки, то начинать нужно с них. Может там элементарный дедлок Если используются WaitForSingleObject, то в случае длительного ожидания, можно выдавать ошибку.

Автор: Joyer 13.1.2009, 20:59
WaitForSingleObject точно не использую.
изучаю пока http://forum.vingrad.ru/forum/topic-60076.html
А что такое дедлок?
Это когда осн. поток ждет другого а тот уже не работает?

Автор: Alexeis 13.1.2009, 22:29
Цитата(Joyer @  13.1.2009,  19:59 Найти цитируемый пост)
Это когда осн. поток ждет другого а тот уже не работает? 

  Когда потоки ждут друг друга.

Автор: Joyer 14.1.2009, 01:19
Да нет, вроде как не потоки. Дело в том, что я отображаю изображения с жесткого диска. Их не много и когда последний из списка показан, программа отображает первый.
т.е. действия цикличны, а зависает программа по истечении произвольного количества времени.
Это приводит к мысли о воздействии внешних факторов (кол-во) свободной памяти, место на HDD, или кол-во доступной видео памяти.
Можно ли как-то проверить наличие не освобожденных указателей? Ведь при загрузки текстуры резервируется видеопамять...

Автор: Joyer 16.1.2009, 03:59
Кто-нибудь в курсе по поводу page faults?
Это единственное, что приходиться подозревать.
Очень внимательно пересмотрел структуру потоков.
Перечитал http://forum.vingrad.ru/forum/topic-60076.html
Может есть особенности в конструкциях try - except, при использовании их в потоках?  smile 

Автор: Alexeis 17.1.2009, 15:47
Joyer, ну решение таких вопрос из области телепатии. Если проект большой, то никто не будет его изучать целиком за вас. Если есть подозрительные фрагменты, то выкладывайте. 

Автор: Joyer 20.1.2009, 05:52
Проблемма была в организации потоков.
Больше ответов получил на более корректно поставленный вопрос здесь:
http://forum.vingrad.ru/forum/topic-244130/anchor-entry1761595/0.html

Alexeis Спасибо, за время потраченное на мою проблему. smile

Добавлено через 1 минуту и 9 секунд
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)