Daemon Beispiel

Zur Vorstellung von Komponenten und Units für Lazarus

Daemon Beispiel

Beitragvon Saschko » 17. Okt 2012, 20:10 Daemon Beispiel

DienstBeispiel.zip
Hallo Leute,

hier wie auf dem Lazarustreffen 2012 abgesprochen mein kleines Daemon Beispiel.

Ich habe noch eine kleine App zum testen fertig gemacht.

Würde mich freuen, wenn ich damit jemandem weiterhelfen kann.

Lieben Gruß

Sascha
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Saschko am 18. Okt 2012, 08:01, insgesamt 2-mal geändert.
Saschko
 
Beiträge: 3
Registriert: 13. Okt 2012, 13:25
Wohnort: Wahlstedt
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Eclipticon » 17. Okt 2012, 20:53 Re: Daemon Beispiel

Willkommen im Forum ;-)

Hat sich dann eigentlich noch eine funktionierende und allgemein existierende Loesung zu Terminate, WaitFor und Destroy ergeben?
Eclipticon
 
Beiträge: 292
Registriert: 5. Feb 2011, 20:38
Wohnort: Wien
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Saschko » 17. Okt 2012, 23:22 Re: Daemon Beispiel

Ich dachte ich hätte die Lösung. Aber nachdem du gefragt hast,
hab ich nochmal gestestet. Und ... verdammt geht noch nicht.

Werd nachher noch mal reinschauen, und meine Ergebnisse dann nochmals hochladen und
beschreiben.
Saschko
 
Beiträge: 3
Registriert: 13. Okt 2012, 13:25
Wohnort: Wahlstedt
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Saschko » 18. Okt 2012, 08:10 Re: Daemon Beispiel

Wenn ich das jatzt richtig verstanden habe, wird der Thread im DataModuleStop auf die harte Tour
beendet, es sei denn man gönnt ihm hier noch etwas Zeit um sich sauber beenden zu können.
Das mit Sleep zu machen ist meiner Meinung nach nicht ganz sauber (Hab es aus der CleanDirs Demo übernommen).
Aber WaitFor wartet leider endlos. Sollte sich der Thread also nie aus der Execute raus kommen,
warten wir hier ewig. Evtl. sollte man beim WaitFor die Millisekunden mit übergeben.
Ich könnte das aber leider nur für die WinAPI implementieren, also erstmal mit Sleep.

Über Anregungen und Vorschläge würde ich mich freuen.

Bis dahin

Sascha
Saschko
 
Beiträge: 3
Registriert: 13. Okt 2012, 13:25
Wohnort: Wahlstedt
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon pluto » 24. Feb 2013, 19:53 Re: Daemon Beispiel

Vielen Dank für das Tolle Beispiel.

Ich habe mich mit dem Stopp Problem befasst und es glaube ich auch lösen können. Es ist ganz einfach: In der Klasse TMeinDaemon muss die Methode ShutDown Überschrieben werden. Dort kann der TMeinServiceThread freigegeben werden und dann wird ins Log auch Ende geschrieben. Jedenfalls Funktioniert es so unter Linux/Debian(Ubuntu). Vielleicht klappt es auch so unter Windows.

Wenn ich nichts Falsch verstanden habe. Unter Linux verwende ich zum Steuern(Start, Stopp und Restart) des daemon ein Shell Script.

Edit01: Es gibt sogar ein Extra Thread: TDaemonThread. Ich weiß nicht, ob man den eher nutzten sollte/könnte. Erste Versuche scheiterten, jedenfalls. Aber ich glaube für mein Vorhaben, ist das kleine Beispiel sehr gut geeignet. Hoffe ich jedenfalls.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6702
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon gocher » 1. Mär 2013, 16:23 Re: Daemon Beispiel

Saschko hat geschrieben:Wenn ich das jatzt richtig verstanden habe, wird der Thread im DataModuleStop auf die harte Tour
beendet, es sei denn man gönnt ihm hier noch etwas Zeit um sich sauber beenden zu können.
Das mit Sleep zu machen ist meiner Meinung nach nicht ganz sauber (Hab es aus der CleanDirs Demo übernommen).
Aber WaitFor wartet leider endlos. Sollte sich der Thread also nie aus der Execute raus kommen,
warten wir hier ewig. Evtl. sollte man beim WaitFor die Millisekunden mit übergeben.
Ich könnte das aber leider nur für die WinAPI implementieren, also erstmal mit Sleep.

Über Anregungen und Vorschläge würde ich mich freuen.

Bis dahin

Sascha

Hallo Sascha,

probier es mal den Thread mit FreeOnTerminate anzulegen, wenn er dann mit Terminate beendet wird kannst Du mit WaitFor warten, so wird auch Execute korrekt beendet.

Code: Alles auswählen
    FThread := TThread.Create(true);
    FThread.FreeOnTerminate := true;
    FThread.Resume;     
 
    FThread.Terminate;
    FThread.WaitFor;
    FThread := nil;     
 

Mein Daemon Beispiel findest Du unter http://www.lazarusforum.de/viewtopic.php?f=55&t=5495&p=55766#p55766
MfG Gocher
akt. Projekt: Webserver mit integrierten CMS in Free Pascal - www.gocher.me
gocher
 
Beiträge: 295
Registriert: 23. Nov 2010, 23:41
Wohnort: Geldern
OS, Lazarus, FPC: Win/Linux, Lazarus SVN, FPC SVN | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon fpGUIcoder » 4. Mai 2016, 20:11 Re: Daemon Beispiel

Schönes Beispiel. Auch für Einsteiger in das Thema übersichtlich und verständlich. Auch wenn ich mir auch nach Studium des Quellcodes noch nicht erklären kann, warum der Dienst nicht anläuft. Dazu ist es wohl dann doch nötig, mich ein wenig in die Materie einzuarbeiten.


Kann da jemand eine gute Doku empfehlen?

Ich könnte einen Dienst gebrauchen, der bei Hardwarefehlern, möglichst noch vor dem wahrscheinlichen Absturz Daten sichert und runter fährt, am besten mit einem Meldungsfenster vorher noch.

Da ich hier noch Windows XP nutze, hatte ich schon Programmversionen die auf diesem System nicht mehr laufen. Ich bekommen dann eine Fehlermeldung der Art "Prozedureinsprungspunkt in xxx.dll nicht gefunden.

Wenn das nur wenige API Funktionen beträfe, die da fehlen. hätte ich gerne einen Dienst, der dann auf eine von mir geschriebene API Funktion umleitet und diese anstelle der in späteren Windowas Versionen vorhandenen API Funktionen aufruft. Sagen wir, wenn das nur eine einzige Funktion oder zwei oder höchstens drei beträfe. Wenn es mehr werden geht wohl ein Update schneller.
fpGUIcoder
 
Beiträge: 199
Registriert: 20. Okt 2015, 22:13

• Themenende •

Zurück zu Units/Komponenten



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried