powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TApplication завершение работы
9 сообщений из 34, страница 2 из 2
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
9 сообщений из 34, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TApplication завершение работы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (1), Yandex Bot 1 мин.
Пользователи онлайн (16): Анонимы (13), Bing Bot, Yandex Bot 1 мин., Google Bot 3 мин.
x
x
Закрыть


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