![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие программы [D7, XP]
Sysanin © (2005-11-18 21:06:00)Может и тупой вопрос но... Как можно закрыть программу? Какой процедурой?
GuAV (2005-11-21 00:56:00) [1]Eraser © (20.11.05 2:17) [9]
Halt приведёт к не-вызову деструкторов форм, однако это не во всех случаях ощутимо ускорит медленную выгрузку, т.к. финализация модулей и финализация глобальных переменных будут всё же выполнена.
Для более быстрого выхода следует использовать ExitThrerad или ExitProcess.
Для ускорения финализации части глобальных переменных или полей классов их "зануляют". var S: string; I: IMyIntf; Pointer(S) := nil; Pointer(I) := nil;
Application.Terminate - выход из цикла диспечеризации сообщений application.Run - т.е. "классический" способ выхода, когда выполнение доходит до последней строки.
Eraser (2005-11-20 23:30:00) [2]
> Германн © (20.11.05 02:38) [10]
> А halt эту информацию теряет. Желаешь ли ты, чтобы твоя
> текущая позиция в игрушке сохранилась для продолжения игры?
>
Так перед вызовом halt надо сохранять данные, а память намного быстрее освобождается сразу для всего приложения, чем при освобождении по частям.
Германн (2005-11-20 02:38:00) [3]
> Кстати прослеживается аналогия с играми, одно время выход
> из игрушки особенно на слабой машине занимал не мало времени,
> т.к. предварительно "вручную" освобождалась память, последнее
> же время (года 3) стали применять именно непосредственное
> закрытие дескриптора процесса и игрушки стали вышружаться
> гораздо быстрее.
Что-то мне сомнительна эта аналогия. "Ручное" освобождение памяти, имхо, не на много медленнее автоматитческого. А вот сохранение, скажем так, "желательной и полезной" информации на диск, действительно может занимать время. А halt эту информацию теряет. Желаешь ли ты, чтобы твоя текущая позиция в игрушке сохранилась для продолжения игры?
Eraser (2005-11-20 02:17:00) [4]Приемущество halt (не знаю как насчёт terminate) в том, что программа закрывается практически моментально, не уничтожая предварительно все свои объекты. Например при разрушении формы последовательно уничтожаются все содержащиеся на ней объекты, а halt просто даёт команду закрыть процесс. Естественно перед вызовом halt необходимо сохранить нужные данные.
Кстати прослеживается аналогия с играми, одно время выход из игрушки особенно на слабой машине занимал не мало времени, т.к. предварительно "вручную" освобождалась память, последнее же время (года 3) стали применять именно непосредственное закрытие дескриптора процесса и игрушки стали вышружаться гораздо быстрее.
tigrenok (2005-11-20 01:41:00) [5]Закравай все от меньшего к большему! CLOSE!
Сайбель Алексей (2005-11-19 18:22:00) [6]
>А в каждой форме открытые DataSets и т.д. и т.п....
> Нехорошо, наверное и frmMain.Close и
> Application.Terminate
Ты вообще программу собираешься закрывать?
Ничего не вижу плохого в frmMain.Close,
предварительно закрывай все свои ДатаСэты.
Asail (2005-11-19 17:36:00) [7]А если открыто, помимо главной, еще несколько форм - тогда как?
А в каждой форме открытые DataSets и т.д. и т.п....
Нехорошо, наверное и frmMain.Close и Application.Terminate
SergP (2005-11-19 13:49:00) [8]
> Sysanin (18.11.05 21:55) [4]
> Close не подходит, я уже пробовал... А вот Application.Terminate
> мона попробовать
Close только для главной формы
Sysanin (2005-11-18 21:55:00) [9]Close не подходит, я уже пробовал... А вот Application.Terminate
мона попробовать
Eraser (2005-11-18 21:24:00) [10]
> close (18.11.05 21:18) [2]
А если Form1 - не главная форма программы? )
close (2005-11-18 21:18:00) [11]procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
Eraser (2005-11-18 21:08:00) [12]Application.Terminate
или Halt