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;