ибо нужно перед выходом выполнить кое-какие завершающие действия.
надо под Win и под Linux.
никакого эксепшена вроде нету для этого

Модератор: Модераторы

unit CtrlC;
{$MODE DELPHI}
{$H+}
interface
uses SysUtils {$IFDEF LINUX}, BaseUnix {$ENDIF};
procedure SetCtrlCHandler;
function IsAborted: boolean;
implementation
var
  Aborted: boolean;
{$IFDEF LINUX}
procedure CtrlHandler(sig: cint); cdecl;
begin
  //writeln('signal= ', sig);
  if sig = SIGINT then
    Aborted := True;
end;
{$ELSE}
function SetConsoleCtrlHandler(HandlerRoutine: pointer; Add: LongBool): LongBool;
  stdcall; external 'kernel32.dll';
function CtrlHandler(CtrlType: DWORD): LongBool; stdcall;
const
  CTRL_C_EVENT = 0;
begin
  Result := False;
  if CtrlType = CTRL_C_EVENT then
  begin
    Aborted := True;
    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;
function IsAborted: boolean;
begin
  Result := Aborted;
end;
end.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1