AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Grundsätzliches internes zu Linux
Thema durchsuchen
Ansicht
Themen-Optionen

Grundsätzliches internes zu Linux

Ein Thema von t2000 · begonnen am 30. Nov 2020 · letzter Beitrag vom 30. Nov 2020
Antwort Antwort
Benutzerbild von t2000
t2000

Registriert seit: 16. Dez 2005
Ort: NRW
232 Beiträge
 
Delphi 12 Athens
 
#1

Grundsätzliches internes zu Linux

  Alt 30. Nov 2020, 09:34
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;
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  Mit Zitat antworten Zitat
Thomas Horstmann

Registriert seit: 25. Apr 2007
Ort: NRW
87 Beiträge
 
Delphi 12 Athens
 
#2

AW: Grundsätzliches internes zu Linux

  Alt 30. Nov 2020, 17:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von t2000
t2000

Registriert seit: 16. Dez 2005
Ort: NRW
232 Beiträge
 
Delphi 12 Athens
 
#3

AW: Grundsätzliches internes zu Linux

  Alt 30. Nov 2020, 17:31
Danke schon mal. Der Hinweis hat mich zu dieser Seite geführt
http://blog.paolorossi.net/2017/09/0...delphi-part-2/
Ich glaube, damit kommen wir schon mal weiter
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#4

AW: Grundsätzliches internes zu Linux

  Alt 30. Nov 2020, 17:35
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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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