ибо нужно перед выходом выполнить кое-какие завершающие действия.
надо под 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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10