Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ereignis beim Shutdown plattformübergreifend (https://www.delphipraxis.net/28430-ereignis-beim-shutdown-plattformuebergreifend.html)

paelesoft 24. Aug 2004 19:04


Ereignis beim Shutdown plattformübergreifend
 
Wie der Shutdown von Win-Maschinen bei VCL (mit Hilfe von Messages) abgefangen werden
kann, ist bekannt:

Ereignis beim Shutdown

Aber weiß jemand, wie ich das plattformübergreifend z.B. mit CLX in Kylix machen
kann?

Assarbad 29. Aug 2004 13:51

Re: Ereignis beim Shutdown plattformübergreifend
 
IChw eiß nicht welches, aber IMO ist das eines der SIGINT()s

Code:
signal(SIGINT, shutDown) ...
Das Abfangen muß also auch gehen, denn bei Konsole wird das SIGINT ja auch abgefangen (zB wenn du Ctrl-C drückst). Vielleicht hilft dir das Stichwort was. Ohne Compilerdirektiven wirst du wohl nicht auskommen - also eine Version der gleichen Funktion auf Win und eine auf Lnx

paelesoft 30. Aug 2004 23:48

Re: Ereignis beim Shutdown plattformübergreifend
 
Danke, Assarbat. Der Tip war (denke ich :wink: ) absolut richtig.
Habe aber noch das Problem, dass die App nicht wie gewünscht reagiert.
Das KILL -Signal lässt sich nicht umleiten (steht in der manpage) aber das
SIGTERM sollte gehen. Geht aber nicht! Oder fährt an der Stelle schon das Programm
runter und eine Messagebox wird unterdrückt??? Aber müsste es dann nicht wenigstens piepen?
Habe ich vielleicht "TermProcess" falsch deklariert oder eingebunden?
Könnte bitte jemand mal einen Blick drauf werfen?

Delphi-Quellcode:
unit Sig1;

interface

uses
  LibC,
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;


procedure TermProcess(Signal : Integer); cdecl;

var
  Form1: TForm1;

implementation

{$R *.xfm}

var SaveSigHandler : TSignalHandler = nil;

procedure TermProcess;
begin
  Beep;
  Application.MessageBox('Terminate','Signal');
  if @SaveSigHandler <> nil then SaveSigHandler(Signal);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SaveSigHandler:=signal(SIGTERM,TermProcess);
end;

end.

Assarbad 31. Aug 2004 00:22

Re: Ereignis beim Shutdown plattformübergreifend
 
Da ich selber kein Kylix habe, kann ich weiter nicht helfen. Frag doch mal im speziellen Kylix-Bereich nach (mit Verweis auf diesen Beitrag hier).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz