powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TApplication завершение работы
34 сообщений из 34, показаны все 2 страниц
TApplication завершение работы
    #40137185
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Подскажите, пожалуйста, какой метод надо перекрыть в потомке TApplication, чтобы обработать завершение программы
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137187
Фотография DetSimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит от того, что ты хочешь сделать
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137188
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DetSimen, я хочу поймать момент завершения работы Application и выполнить некоторые действия перед выходом.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137189
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

а чем не понравилось перехватить закрытие главной формы?
А вообще смотри компонент TApplicationEvents OnTerminate, что ли.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137191
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gurвыполнить некоторые действия перед выходом.

Поместить код после вызова Application.Run или в секцию finalization мешает что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137193
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Доброго времени суток. Подскажите, пожалуйста, какой метод надо перекрыть в потомке TApplication, чтобы обработать завершение программы

Не надо так делать. Применение потомков TApplication - сомнительная и спорная практика. Как минимум, она требует определённого уровня квалификации, при котором человек сам без проблем найдёт ответ на этот вопрос. Раз Вы его задаёте - лучше не лезьте в дебри и не тащите туда проект.

S_Gur
DetSimen, я хочу поймать момент завершения работы Application и выполнить некоторые действия перед выходом.

Application здесь не при чём. Для этого существует ряд возможностей, наиболее классическая, ещё с 83-го года, называется AddExitProc (без проблем гуглится).
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137194
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, у меня нет главной формы. Вообще нет форм. В этом и проблема
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137195
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, После вызова Application.Run не срабатывает - видимо, Run выкидывает раньше. А секцию Finalization мне ставить негде - насколько я помню, в файле проекта это не поддерживается
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137200
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

Значит где то чтото типа ExitProcess стоит, найти где процесс заканчивается из под отладчика 5 минут, а гадать что за странное приложение можно долго…
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137203
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, это Лазарус. Там вообще не очень хорошо с отладчиком, но ищу. Просто надеялся, что кто-то сталкивался
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137208
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,
В форумах по Лазарусу спрашивал?
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137209
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F, кинул вопрос на фрипаскалевский форум, пока ответа нет
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137210
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

Просто у вас там скорее всего совсем другой TApplication.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137212
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F, да, я пишу простенький веб-сервер. Но он унаследован от обычного TCustomApplication

https://wiki.lazarus.freepascal.org/fpWeb_Tutorial/ru

Webserver example

This is an example of a simple, cross-platform, multi-threaded web server.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
program webserver;
 
{$mode objfpc}{$H+}
 
uses
  {$ifdef UNIX}
    cthreads, cmem,
  {$endif} 
  fphttpapp, httpdefs, httproute;
 
procedure route1(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 1 The Default</h1></body></html>'
end;
 
procedure route2(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 2</h1></body></html>'
end;
 
begin
  HTTPRouter.registerRoute('/', @route1, true);
  HTTPRouter.registerRoute('/route2', @route2);
  Application.port := 8080;
  Application.threaded := true;
  Application.initialize;
  Application.run;
end.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137219
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Gur,

ну и зачем тебе вообще TApplication?
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137222
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_GurПосле вызова Application.Run не срабатывает - видимо, Run выкидывает раньше.

Или ты просто не понимаешь как программа работает и "завершением" называешь
что-то другое.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137233
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ, потому, что не знаю, как обойтись без него. Пока, во всяком случае, не получается. Если подскажете другое решение - буду очень признателен
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137234
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, завершением программы в данной конкретной ситуации я называю окончание работы метода Run. Но в этом классе он не перекрывается, поэтому я пытаюсь найти другое решение
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137237
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

скажите, это приложение является сервисом в Windows или демоном в Unix? Если так, то обрабатывайте остановку службы, а не окончание работы TApplication.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137239
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45, планируется именно так, но пока что это тестовый пример и запускается в виндах как обычное приложение - в службу я его еще не заворачивал
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137245
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Код: pascal
1.
Application.run;


Если после этой строки вставить свой код, то он не работает?
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137257
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, нет - в этом и дело. В Application класса TApplication - работает. В Application класса THTTPApplication - нет. После Application.Run программа завершается
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137268
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
wadman, нет - в этом и дело. В Application класса TApplication - работает. В Application класса THTTPApplication - нет. После Application.Run программа завершается

Непонятные вещи пишешь, даже противоречивые...

"Done" напишет при завершении?

S_Gur
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
program webserver;
 
{$mode objfpc}{$H+}
 
uses
  {$ifdef UNIX}
    cthreads, cmem,
  {$endif} 
  fphttpapp, httpdefs, httproute;
 
procedure route1(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 1 The Default</h1></body></html>'
end;
 
procedure route2(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 2</h1></body></html>'
end;
 
begin
  HTTPRouter.registerRoute('/', @route1, true);
  HTTPRouter.registerRoute('/route2', @route2);
  Application.port := 8080;
  Application.threaded := true;
  Application.initialize;
  Application.run;
  Writeln('Done');
end.

...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137278
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подозреваю, что что бы Application.run закончился, надо где то вызывать Application.Terminate, чего никто не делает. А закрытие по крестику или чему там, просто убивает приложение. тут надо или обработчик Ctrl+C писать для терминалов, или урл какой предусмотреть типа /quit Что бы по нему приложение корректно завершалось.
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137283
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, нет, не напишет. До этой строки дело не доходит. Ты сам попробуй, если Лазарус стоит. Код, который я привел - это законченное приложение
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137285
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, да, я это уже понял. По вызову Terminate код, идущий после Application.Run, отрабатывает. Мне почему-то казалось, что закрытие окна крестиком - это не аварийный выход. Буду искать, как написать обработчик Ctrl+С - это все равно нужно. Спасибо, я понял, в какую сторону нужно копать дальше
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137291
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,
SetConsoleCtrlHandler кажется
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137297
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, да, нашел уже, все равно - большое спасибо
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137310
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman"Done" напишет при завершении?

Если приложение не консольное - не напишет по определению ибо некуда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137321
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, скажи, пожалуйста, а я могу при перехвате Ctrl+C как-то указать, что ситуация штатная, а не аварийная? Потому как если я выполняю Application.Terminate при обработке HTTP-запроса, программа завершается штатно и правильно. А когда я делаю то же самое при обработке Ctrl+C, то я свои необходимые действия выполнить могу, но по факту программа все равно закрывается аварийно. Можно ли как-то сбросить признак аварийного выключения?
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137322
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

ты же возвращаешь правильно Result в обработчике? код в студию
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137325
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function CtrlHandler(CtrlType: DWORD): LongBool; stdcall;

begin
  Result := False;
  if CtrlType In [0..6] then
  begin
    //Aborted := True;
    //BEApplication.Terminate;
    Result := True;
  end;
end;
{$ENDIF}

procedure SetCtrlCHandler;
{$IFDEF LINUX}
var
  oa, na: SigActionRec;
{$ENDIF}
begin
{$IFDEF LINUX}
  na.sa_handler := SigActionHandler(@CtrlHandler);
  FillChar(na.sa_mask, sizeof(na.sa_mask), #0);
  na.sa_flags := SA_ONESHOT;
  na.sa_restorer := nil;
  fpSigAction(SIGINT, @na, @oa);
{$ELSE}
  SetConsoleCtrlHandler(@CtrlHandler, True);
{$ENDIF}
end;
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137329
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

должно работать. попробуй всегда True возвращать, попробуй логировать что за CtrlType приходит, посмотри как на Ctrl+C реагирует...
Ну и классика - SetConsoleCtrlHandler что возвращает?
...
Рейтинг: 0 / 0
TApplication завершение работы
    #40137352
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, SetConsoleCtrlHandler возвращает True, события перехватываются, на нажатие крестика получаю 2, на Ctrl+C - 0, все в соответствии с константами, там все правильно, перехват выполняется корректно. В общем-то, это уже неважно, я выкрутился несколько иначе:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Unit U_BEApp;

{$mode ObjFPC}{$H+}

Interface

Uses
  custhttpapp, Classes, SysUtils, U_DM;

Type
  TBackEndApplication = Class(TCustomHTTPApplication)
                        Public
                        End;

Var
  BEApplication     : TBackEndApplication;
  ShowCleanUpErrors : Boolean = False;

Implementation

Uses
  CustApp;

Procedure InitHTTP;

begin
  BEApplication                                             := TBackEndApplication.Create(Nil);
  If Not assigned(CustomApplication) Then CustomApplication := BEApplication;
  DM := TDM.Create(Nil)
end;

Procedure DoneHTTP;

begin
  DM.Free;
  If CustomApplication = BEApplication Then CustomApplication := Nil;
  Try
    FreeAndNil(BEApplication);
  Except
    If ShowCleanUpErrors Then Raise
  End
End;

Initialization
  InitHTTP;

Finalization
  DoneHTTP;
End.



Теперь все, что мне нужно, очень корректно обрабатывается в процедурах InitHTTP и DoneHTTP. Моя проблема решена, всем большое спасибо за помощь
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TApplication завершение работы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Bing Bot, Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]