Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Вниз

Error   Найти похожие ветки 

 
Gayrus   (2003-03-04 03:45) [0]

Мне нужно дождяться, пока отработает одна форма, а потом продолжить выполнение программы, я делаю так:

Procedure ShowForm;
begin
MenuForm.Tag:=0;
MenuForm.InitGL;
MenuForm.Show;
while MenuForm.Visible do Application.ProccesMessages;
end;

Но программа упорно выдаёт ошибку "Stack overflow" после того как форма скрывается. Может подскажите с чем это связано или хоть в каком направлении искать?


 
Anatoly Podgoretsky   (2003-03-04 09:32) [1]

Наверно у тебя MenuForm.Show вызывает ShowForm; или ошибка в MenuForm.InitGL;


 
Gayrus   (2003-03-05 03:20) [2]

Нет, там всё нормально, ошибка возникает после скрытия формы.


 
Юрий Зотов   (2003-03-05 03:28) [3]

Здесь ошибок нет, нужно видеть больше кода.
А вообще, используйте ShowModal, выкиньте ненужный цикл и не мучайтесь.


 
Gayrus   (2003-03-05 03:40) [4]

ShowModal-попробую,просто я раньше с таким не сталкивался, возможно это из-за Form.Hide?
procedure TMenuForm.FormHide(Sender: TObject);
var I:Integer;
begin
try
If Length(FontArr)>0 then begin
for I:=0 to High(FontArr)do glDeleteLists(FontArr[i],256);
end;
If Length(aTextur)>0 then begin
for I:=0 to High(aTextur)do glDeleteTextures(1,@aTextur[i]);
end;
If Length(MenuArr)>0 then begin
for I:=0 to High(MenuArr)do glDeleteLists(MenuArr[i],1);
end;
{ wglMakeCurrent(0,0); // Освобождение OpenGL
wglDeleteContext(MenuForm.h_rc);}
If Length(BitmapArr)>0 then begin
for I:=0 to High(BitmapArr)do BitmapArr[i].Free;
end;
finally
BitmapArr:=nil;
mFilesArr:=nil;
mComenArr:=nil;
mNamesArr:=nil;
FontArr:=nil;
MenuArr:=nil;
aTextur:=nil;
aFont:=nil;
aComp:=nil;
sData:=nil;
end;


 
Юрий Зотов   (2003-03-05 05:31) [5]

Почти наверняка причина в том, что ПРИ закрытии TMenuForm (или уже ПОСЛЕ ее закрытия) возникает бесконечная рекурсия. Но гадать, где и почему она возникает, можно очень долго. А главное, гадать и не нужно.

1. Поставьте BreakPoint на строке end в Procedure ShowForm (BP1).
2. Второй BreakPoint поставьте на входе в TMenuForm.FormHide (BP2).
3. Откройте окно Call Stack и запустите программу. Вы должны прийти на BP2. Жмите F9 ОДИН раз.
4. Если после этого Вы пришли снова на BP2, то рекурсия возникает ПРИ закрытии TMenuForm. Просмотрите стек вызовов и найдите в нем повторяющуюся цикличность вызовов. Внимательно просмотрите код участвующих в этом цикле процедур, начиная с ПОСЛЕДНЕЙ (скорее всего, ошибка именно в ней) и найдите причину рекурсии.
5. Если же Вы пришли на BP1, то рекурсия возникает уже ПОСЛЕ закрытия TMenuForm и с самой TMenuForm может быть совершенно никак не связана. Жмите много раз F8 и наблюдайте за окном стека. Как только в нем появится одна из процедур, которая уже есть ниже - рекурсия обнаружена. Виновата в ней, скорее всего, предыдущая процедура - начинайте смотреть код с нее.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
6-54155
NewGuest
2003-01-26 23:01
2003.03.17
Как реализовать посылку сообщения на Winpopup...


1-54026
BLooDMaN
2003-03-04 20:31
2003.03.17
Запуск программ из D6


3-53850
sie_vedenie
2003-02-26 19:29
2003.03.17
Помогите разобраться с ADS


6-54128
ZiLot
2003-01-25 10:54
2003.03.17
---|Ветка была без названия|---


1-54074
Programist
2003-03-04 16:06
2003.03.17
По потокам (Thread)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский