Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
как грамотно закрыть программу
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: как грамотно закрыть программу (Прочитано 24458 раз)
0 Пользователей и 1 Гость смотрят эту тему.
locator
Постоялец
Offline
как грамотно закрыть программу
«
:
11-04-2007 18:08 »
Доброго времени суток! При закрытии программы я выполняю в OnClose
кучу всяких действий: закрытие портов, убивание потоков и.т.д.
Однако, окно программы закрывается, а в диспетчере задач она продолжает висеть и
загрузка показывает 100%. Или еще хуже: окно не закрывается и
повисает. Как с этим бороться и вообще, как грамотно закрывать
программы? Спасибо за ответ!
Записан
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
Re: как грамотно закрыть программу
«
Ответ #1 :
11-04-2007 20:15 »
С обработчика события OnClose ты что возрашаеш?
Записан
Не будите спашяго дракона.
Джаффар (Коша)
RXL
Технический
Администратор
Offline
Пол:
Re: как грамотно закрыть программу
«
Ответ #2 :
12-04-2007 10:36 »
Чтобы форма закрылась и ресурсы высвободились в OnClose нужно установить желаемой действие в Action. Напр.: Action := caFree
Также форму нужно убрать из списка предварительно создаваемых.
«
Последнее редактирование: 12-04-2007 10:38 от RXL
»
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
locator
Постоялец
Offline
Re: как грамотно закрыть программу
«
Ответ #3 :
12-04-2007 18:36 »
Цитата: RXL от 12-04-2007 10:36
Чтобы форма закрылась и ресурсы высвободились в OnClose нужно установить желаемой действие в Action. Напр.: Action := caFree
Также форму нужно убрать из списка предварительно создаваемых.
Так форма закрывается вроде, но ресурсы не овобождаются
Записан
locator
Постоялец
Offline
Re: как грамотно закрыть программу
«
Ответ #4 :
12-04-2007 18:37 »
Цитата: Finch от 11-04-2007 20:15
С обработчика события OnClose ты что возрашаеш?
ничего не возвращаю кажется, а как он может что-то возвращать?
Записан
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
Re: как грамотно закрыть программу
«
Ответ #5 :
12-04-2007 19:31 »
locator
, Насколько я помню, в обработчик вроде подставляется функция. И насколько я помню Дельфи, вроде нужно просто ключевому слову result присвоить значение возврата при выходе из функции. Что именно, посмотри Help.
Записан
Не будите спашяго дракона.
Джаффар (Коша)
zubr
Гость
Re: как грамотно закрыть программу
«
Ответ #6 :
16-04-2007 04:07 »
OnClose, да и все стандартные обработчики событий в Delphi - процедура, а не функция, поэтому никакой Result здесь не нужен, более того, он вызовет ошибку компилляции.
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Какой то код
Action:=caFree;
end;
Но думаю Action:=caFree; врядли поможет, скорее всего какие то проблемы в программе - может какой то поток еще работает, или порт не закрылся.
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: как грамотно закрыть программу
«
Ответ #7 :
16-04-2007 04:16 »
zubr
, есть свойство формы ModalResult. Согласно документации управление вернется в родительскую форму после установки ModalResult в значение отличное от ноля.
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
DemonicAlligator
Гость
Re: как грамотно закрыть программу
«
Ответ #8 :
16-04-2007 10:07 »
ModalResult имеет значение только для модальных форм. Если форма немодальная, то присвоение ничего не изменит, пока явно не вызовешь Form.Close
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: как грамотно закрыть программу
«
Ответ #9 :
16-04-2007 16:16 »
Синий Аллигатор
, да, в данном случае не рулит. Что-то я забыл, что это главная форма...
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
DemonicAlligator
Гость
Re: как грамотно закрыть программу
«
Ответ #10 :
17-04-2007 15:20 »
locator
, Рекомендую пробегать по списку потоков и проверять их закрытие... Ты как потоки завершаешь? Вызываешь Thread.Terminate а в методе Thread.Execute проверяешь Thread.Terminated ?
Записан
locator
Постоялец
Offline
Re: как грамотно закрыть программу
«
Ответ #11 :
21-04-2007 09:22 »
Цитата: Синий Аллигатор от 17-04-2007 15:20
locator
, Рекомендую пробегать по списку потоков и проверять их закрытие... Ты как потоки завершаешь? Вызываешь Thread.Terminate а в методе Thread.Execute проверяешь Thread.Terminated ?
Просто вызываю Thread.TerminateHard и ничего не проверяю. Я так понял что надо проверять Thread.Terminated обязательно, иначе зависает поток
Записан
DemonicAlligator
Гость
Re: как грамотно закрыть программу
«
Ответ #12 :
23-04-2007 06:40 »
Лучше в методе Execute внутри цикла проверять Terminated и если истина - освобождать все ресурсы и выходить из метода, тогда всё будет прибито корректно.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
как грамотно закрыть программу
Загружается...