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


Автор: PsiMagistr 4.7.2011, 08:19
Одной своей знакомой дал потестить игру. Говорит зависла при закрытии одного из окон. На своей машине я этого никогда не наблюдал. 
Никаких циклов и сложных вычислений в событии закрытия нет, там вообще ничего нет.
Ребята я отлично понимаю всю размытость вопроса, но все же как можно отловить такую ошибку. 

Форма динамическая. Уничтожается через FreeAndNil.

Код

if ProvForm = true then
begin
Battl:= TBattl.Create(fMainMenu); //Создали
Battl.ShowModal; //Показали модально
FreeAndNil(Battl); //Уничтожили.
end;



Battl-имя формы. fMainMenu - другой.

Автор: CodeMonkey 4.7.2011, 14:11
http://www.gunsmoker.ru/2010/06/blog-post_08.html

Автор: PsiMagistr 4.7.2011, 14:34
CodeMonkey, спасибо, читаю. 

Но зависания на своей машине мне добиться так и не удалось. Равно как и зависания на машине моего друга. Прогу чуть ли не наизнанку вывернул, не висит. Да и банально нечему там висеть. Может это с системой связано?

Автор: Poseidon 12.7.2011, 14:29
Цитата(PsiMagistr @  4.7.2011,  08:19 Найти цитируемый пост)
Одной своей знакомой дал потестить игру. Говорит зависла при закрытии одного из окон.
У знакомой этот зависание постоянно? Есть какая-то последовательность действия? Иначе ты ищешь иголку. Может у нее в этот момент память глюканула и все вообще зависло. Тут так просто не разберешься.

Автор: Akella 12.7.2011, 22:51
Для чистоты эксперимента нужно отключить/удалить антивирус(ы).

Добавлено через 1 минуту и 2 секунды
Возможно ты привёл не весь код.
Бывает, что забыл чего-то. Может у тебя динамически создается событие на закрытие формы.

Добавлено через 6 минут и 37 секунд
Цитата(PsiMagistr @  4.7.2011,  08:19 Найти цитируемый пост)
Говорит зависла

Зависла и зависает - две разные вещи smile. Вот если это проявляется систематически...
Мало того. Что там за винда? Если какая-то левая сборка типа суппер-буппер-мега-блэк-эдишен, то сам понимаешь, чем такие сборки могут быть напичканы. Я сам столкнулся с тем, что у клиента программа не запускается. При запуске сразу валится. Винда выдает, что программа выдала недопустимую ошибку и будет закрыта с предложением отправить отчёт в M$. Винда была только-то установлена. Все драйверы были установлены. Оказалось, что у клиента была Windows Black Edition. Как только установили нормальную, чистую лицензионную винду, программа моментально запустилась и работает, как часы.

Добавлено через 10 минут и 7 секунд
Если систематически и нет возможности использовать удалённый отладчик, то можно  сделать что-то вроде отладочной версии с ShowMessage.

Код

if ProvForm = true then
begin
  ShowMessage('1');
  Battl:= TBattl.Create(fMainMenu); //Создали
  ShowMessage('2');
  Battl.ShowModal; //Показали модально
//ещё несколько   ShowMessage внутри модуля повесь на кнопку закрытия - OK или Cancel или чем там закрывается

  ShowMessage('x');
  FreeAndNil(Battl); //Уничтожили.
  ShowMessage('y');
end;


Да, может OnClose нету, но есть OnCloseQuery?

Автор: PsiMagistr 24.7.2011, 06:59
Спасибо большое.

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