Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизЗакрытие программы Найти похожие ветки
← →
Sysanin (2005-11-18 21:06) [0]Может и тупой вопрос но... Как можно закрыть программу? Какой процедурой?
← →
Eraser © (2005-11-18 21:08) [1]Application.Terminate
или Halt
← →
close (2005-11-18 21:18) [2]procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
← →
Eraser © (2005-11-18 21:24) [3]
> close (18.11.05 21:18) [2]
А если Form1 - не главная форма программы? )
← →
Sysanin (2005-11-18 21:55) [4]Close не подходит, я уже пробовал... А вот Application.Terminate
мона попробовать
← →
SergP © (2005-11-19 13:49) [5]
> Sysanin (18.11.05 21:55) [4]
> Close не подходит, я уже пробовал... А вот Application.Terminate
> мона попробовать
Close только для главной формы
← →
Asail (2005-11-19 17:36) [6]А если открыто, помимо главной, еще несколько форм - тогда как?
А в каждой форме открытые DataSets и т.д. и т.п....
Нехорошо, наверное и frmMain.Close и Application.Terminate
← →
Сайбель Алексей © (2005-11-19 18:22) [7]
>А в каждой форме открытые DataSets и т.д. и т.п....
> Нехорошо, наверное и frmMain.Close и
> Application.Terminate
Ты вообще программу собираешься закрывать?
Ничего не вижу плохого в frmMain.Close,
предварительно закрывай все свои ДатаСэты.
← →
tigrenok © (2005-11-20 01:41) [8]Закравай все от меньшего к большему! CLOSE!
← →
Eraser © (2005-11-20 02:17) [9]Приемущество halt (не знаю как насчёт terminate) в том, что программа закрывается практически моментально, не уничтожая предварительно все свои объекты. Например при разрушении формы последовательно уничтожаются все содержащиеся на ней объекты, а halt просто даёт команду закрыть процесс. Естественно перед вызовом halt необходимо сохранить нужные данные.
Кстати прослеживается аналогия с играми, одно время выход из игрушки особенно на слабой машине занимал не мало времени, т.к. предварительно "вручную" освобождалась память, последнее же время (года 3) стали применять именно непосредственное закрытие дескриптора процесса и игрушки стали вышружаться гораздо быстрее.
← →
Германн © (2005-11-20 02:38) [10]
> Кстати прослеживается аналогия с играми, одно время выход
> из игрушки особенно на слабой машине занимал не мало времени,
> т.к. предварительно "вручную" освобождалась память, последнее
> же время (года 3) стали применять именно непосредственное
> закрытие дескриптора процесса и игрушки стали вышружаться
> гораздо быстрее.
Что-то мне сомнительна эта аналогия. "Ручное" освобождение памяти, имхо, не на много медленнее автоматитческого. А вот сохранение, скажем так, "желательной и полезной" информации на диск, действительно может занимать время. А halt эту информацию теряет. Желаешь ли ты, чтобы твоя текущая позиция в игрушке сохранилась для продолжения игры?
← →
Eraser © (2005-11-20 23:30) [11]
> Германн © (20.11.05 02:38) [10]
> А halt эту информацию теряет. Желаешь ли ты, чтобы твоя
> текущая позиция в игрушке сохранилась для продолжения игры?
>
Так перед вызовом halt надо сохранять данные, а память намного быстрее освобождается сразу для всего приложения, чем при освобождении по частям.
← →
GuAV © (2005-11-21 00:56) [12]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 - т.е. "классический" способ выхода, когда выполнение доходит до последней строки.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.039 c