![]() |
Grundsätzliches internes zu Linux
Hallo Forum,
ich möchte die ersten Dienste für Linux entwickeln. Dazu habe ich ein paar ganz grundsätzliche Fragen um den Übergang von Windows zu schaffen. Es geht um Message Verarbeitung, Threads usw. Weiteres wird bestimmt folgen. Ich habe meine Server/Services als Komandozeilen-Programme ausgelegt. So kann ich sie flexibel einsetzen und dachte mir auch, dass es leichter sein wird diese auf andere Platformen zu portieren. Unter Windows habe ich einen Windows-Service, der meinen Kernel-Service kontrolliert und ggf. startet. So, das vorweg. Problem 1: Messageloop Ich habe im Prinzip die Messageloop aus der VCL nachgebildet. Darüber kann ich threadübergreifend Nachrichten senden, sychrone und asynchrone Dinge tun. Wie mache ich das unter Linux? Hier der Code. "ProcessMessage" wird natürlich in einer Schleife aufgerufen. Die Markierungen mit {!!!} sind wohl erstmal die wichtigen Punkte. Ich denke, weitere Fragen werden hier in diesen Thema folgen. Vielen Dank. VG Thomas
Delphi-Quellcode:
function TServerApp.ProcessMessage(var Msg: TMsg): Boolean;
var Handled: Boolean; begin Result := False; {!!!} if PeekMessage(Msg, NativeUInt(-1), 0, 0, PM_REMOVE) then begin Result := True; if Msg.Message <> WM_QUIT then begin Handled := False; case Msg.Message of sms_Processing : ; sms_Quit : FCloseTimer.Enabled := true; sms_Synchronize : SyncExecute( Msg.wParam); sms_Workerthread : CreateWorkItem; end; // case //if Assigned(FOnMessage) then // FOnMessage(Msg, Handled); if not Handled then begin {!!!} TranslateMessage(Msg); {!!!} DispatchMessage(Msg); end; end else begin FTerminate := True; end; end; end; |
AW: Grundsätzliches internes zu Linux
Hallo,
wir haben eine Anwendung (Client/Server-DB) von Windows nach Linux portiert. Allerdings haben wir in Windows schon keine Messages verwendet (bis auf TService). Bei uns läuft ein Hauptthread, der ggf. andere Threads anlegt oder direkt ansteuert. Prozesse können unter Linux per "Signal" untereinander kommunizieren. Über "SIGKILL" und "SIGTERM" kann z.B. in Delphi abgefragt werden, ob der Prozess beendet oder abgebrochen wird. Um eine Linux Anwendung im Hintergrund laufen zu lassen, muss sie als "Daemon" konfigurieren werden. Diese kann dann in Systemd (Type=forking) eingetragen werden, damit sie beim Start mit hochläuft. Es gibt zwar noch "Initd" und anderes, was aber schon veraltet ist. Das Ganze läuft aber grundsätzlich anders wie unter den Windows Diensten. |
AW: Grundsätzliches internes zu Linux
Danke schon mal. Der Hinweis hat mich zu dieser Seite geführt
![]() Ich glaube, damit kommen wir schon mal weiter |
AW: Grundsätzliches internes zu Linux
Kann ich bestätigen. Der Artikel von Paolo ist echt super - ich hab mit dessen Hilfe einen Linux-Daemon gebaut, der mittlerweile seit Februar friedlich vor sich hinwerkelt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz