Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Access violation достал....   Найти похожие ветки 

 
Sirus   (2004-06-23 06:51) [0]

Привет Мастера...
Есть проблемка... Непостоянно возникает Access violation...

if HistoryForm<>Nil Then Begin
   History.NormalClose:=True;
   HistoryForm.Close;
   FreeAndNil(HistoryForm);
   Show;
End;

Подозреваю, что HistoryForm не успевает закрываться при Close и ошибка возникает на FreeAndNil...
Как можно вылечить???


 
Sirus   (2004-06-23 07:02) [1]

TForm.Close ждет закрытия формы или нет???


 
Думкин ©   (2004-06-23 07:11) [2]

HistoryForm создан?


 
TUser ©   (2004-06-23 07:36) [3]


> Подозреваю, что ... ошибка возникает на FreeAndNil...

Надо посмотреть отладчиком.

А в OnClose формы что прописано. Я к тому, что м.б. Action = caFree (default), тогда на Free&Nil действительно будет AV.


 
Роман   (2004-06-23 08:53) [4]

Сделай в обработчике THistoryForm.OnClose присвоение action:=cafree вместо того, что ты делаешь.

И вообще, форма разрушается не через Free, а через Release.


 
Роман   (2004-06-23 08:59) [5]

Если ты делаешь то что написал в таймере, то скорее всего ты попадаешь в ситуацию, когра сообщение от таймера обрабатывается чуть раньше сообщения, посланного HistoryForm. Поэтому надо делать Release вместо Free, а затем просто присвоить HistoryForm:=nil;


 
Anatoly Podgoretsky ©   (2004-06-23 11:41) [6]

Так как здесь у тебя повтороное использование перенных, то можно предполагать, что это не единственное место где форма разрушается и создается, отсбда количество мест для ошибки гораздо больше.


 
Sirus   (2004-06-24 07:58) [7]

Форма создается главной формой...
А вышеуказанная процедура вызывается самой формой HistopryForm при нажатии кнопки...
В OnCloseQuery формы HistoryForm:
CanClose:=NormalClose;

Ошибка возникает не всегда... примерно один раз за 10 закрытий формы HistoryForm...

Роман   (23.06.04 08:59) [5] > Таймера нигде нет...

В OnClose ничего нет...


 
TUser ©   (2004-06-24 09:22) [8]


> А вышеуказанная процедура вызывается самой формой HistopryForm
> при нажатии кнопки...

Лучше ее не здесь вызывай.


 
ЮЮ ©   (2004-06-24 09:32) [9]

> А вышеуказанная процедура вызывается самой формой HistopryForm
> при нажатии кнопки...

Тогда чей метод Show вызывается? Самоуничтожаемой HistoryForm ???
И что там за History присоседилась к процессу самоубийства ???

if HistoryForm<>Nil Then Begin
  History.NormalClose:=True;
  HistoryForm.Close;
  FreeAndNil(HistoryForm);
  Show;
End;


 
younghacker   (2004-06-24 10:03) [10]

Роман!

Чем отличается для форм использование Release вместо Free?
Откройте исходники TForm и посмотрите!

Дело в том что часто под BDE форма с открытыми запросами
на которую отправили CM_Release не закрывается сразу, а остается
невидимой но с открытым запросом, и при подтверждении транзакции
запрос переоткрывается как будто форма активна.
Суть в том, что Release помещает в очередь событий окна сообщение на освобождение формы. И обработано оно будет когда будет сделано Application.ProcessMessage; тоесть после возврата  из всех обработчиков формы.

Проблема именно в том что форма дает сообщение освободить себя
и метод сразуже отваливает. А сообщение ждет своей очереди. И когда она приходит. Нужно это понимать. :)

Феномен вызывает именно нестабильное поведение форм в приложении. И периодическое появление всяких глюков связанных с реальным _НЕ_освобождением формы. В том числе ощибки доступа когда форма принудительно освобождена, а кто-то думает что она еще живет на том же месте.

Так что я делал всегда так.

Free вместо Release.

А указатели на форму сбрасываю в деструкторе формы.
Естественно что при создании формы я передаю указатели на указатели формы и также автоматически их инициализирую в конструкторе формы.

Удачи!



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

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
4-1085487564
Kristy
2004-05-25 16:19
2004.07.11
Получение нажатий клавиш в Windows с помощью WH_JOURNALRECORD


11-1076007813
X_9
2004-02-05 22:03
2004.07.11
Проблемы с KOL и KOL - компонентами


11-1072624082
Gandalf
2003-12-28 18:08
2004.07.11
Чаво нам добавить в Чаво?


1-1087753166
Павел
2004-06-20 21:39
2004.07.11
индикатор Db как у Винампа


14-1087880086
Vlad Oshin
2004-06-22 08:54
2004.07.11
А какое самое оригинальное спам-письмо Вам пришло?