Läuft die Anwendung noch ?
-
- Beiträge: 104
- Registriert: Mi 2. Jun 2010, 17:56
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Läuft die Anwendung noch ?
Hallo an alle und auch einen schönen Tag (bei uns scheint die Sonne, sieht aus wie Frühlingsanfang)!
Folgendes Problem:
Ich habe eine Anwendung in Lazarus geschrieben, die wertet verschiedene Daten auf einem externen Server aus und stellt die Ergebnisse
dann für Datenbanken in Text-Dateien ab. Mit den Programmen, die diese Textdateien dann verarbeiten, habe ich nichts mehr zu tun,
dafür sind dann andere Kollegen mit ihren Programmen zuständig. Meine Anwendung führt ein Logbuch, in welchem der Fortschritt mit Datum und Uhrzeit
zeilenweise protokolliert wird. Dieses Protokoll werten die Programme der Kollegen aus und kennen so den Verlauf meiner Anwendung.
Nun kann es vorkommen, daß die Eintragungen in diese Logdatei meiner Anwendung manchmal zeitlich weit
auseinander liegen, weil meine Anwendung z.B. eine Anfrage auf einen externen Server abgesetzt hat und der
Server für die Antwort sehr lange braucht. In den Programmen meiner Kollegen kommt dann oft die Frage auf,
ob meine Anwendung überhaupt noch läuft, oder ob sie vielleicht durch einen Fehler abgebrochen wurde, warum auch immer.
Das Problem ist, daß bei einer solchen Abfrage Lazarus still steht und sich bis zur Reaktion vom Server nichts tut.
Hat jemand eine Idee, wie meine Anwendung in einem solchen Fall trotzdem, vielleicht in vorgegebenen Abständen, eine
Eintragung in meine Logdatei machen kann, damit die Programme der Kollegen wissen, daß sich da noch was tut?
Mit freundlichen Grüßen,
Hercules.
Folgendes Problem:
Ich habe eine Anwendung in Lazarus geschrieben, die wertet verschiedene Daten auf einem externen Server aus und stellt die Ergebnisse
dann für Datenbanken in Text-Dateien ab. Mit den Programmen, die diese Textdateien dann verarbeiten, habe ich nichts mehr zu tun,
dafür sind dann andere Kollegen mit ihren Programmen zuständig. Meine Anwendung führt ein Logbuch, in welchem der Fortschritt mit Datum und Uhrzeit
zeilenweise protokolliert wird. Dieses Protokoll werten die Programme der Kollegen aus und kennen so den Verlauf meiner Anwendung.
Nun kann es vorkommen, daß die Eintragungen in diese Logdatei meiner Anwendung manchmal zeitlich weit
auseinander liegen, weil meine Anwendung z.B. eine Anfrage auf einen externen Server abgesetzt hat und der
Server für die Antwort sehr lange braucht. In den Programmen meiner Kollegen kommt dann oft die Frage auf,
ob meine Anwendung überhaupt noch läuft, oder ob sie vielleicht durch einen Fehler abgebrochen wurde, warum auch immer.
Das Problem ist, daß bei einer solchen Abfrage Lazarus still steht und sich bis zur Reaktion vom Server nichts tut.
Hat jemand eine Idee, wie meine Anwendung in einem solchen Fall trotzdem, vielleicht in vorgegebenen Abständen, eine
Eintragung in meine Logdatei machen kann, damit die Programme der Kollegen wissen, daß sich da noch was tut?
Mit freundlichen Grüßen,
Hercules.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2636
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Läuft die Anwendung noch ?
Du müsstest einen Thread erzeugen und in diesem periodisch deine Logdatei befüllen. Irgendwas wie "...is still running."
Irgendwie habe ich im Hinterkopf, dass es auch einen ThreadedTimer gibt, der seinen Thread selber erzeugt, so dass man sich um nix weiter kümmern muss. Kann aber auch bei Delphi gewesen sein.
Irgendwie habe ich im Hinterkopf, dass es auch einen ThreadedTimer gibt, der seinen Thread selber erzeugt, so dass man sich um nix weiter kümmern muss. Kann aber auch bei Delphi gewesen sein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 104
- Registriert: Mi 2. Jun 2010, 17:56
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Läuft die Anwendung noch ?
Hallo Michael, vielen Dank für Deine schnelle Reaktion.
Ich kann mir zwar denken was ein Thread ist und was der macht, aber
da muß ich mich erst mal schlau machen. Hab sowas noch nie gebraucht.
Vielen Dank für den Tip!
Ich kann mir zwar denken was ein Thread ist und was der macht, aber
da muß ich mich erst mal schlau machen. Hab sowas noch nie gebraucht.
Vielen Dank für den Tip!
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2636
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Läuft die Anwendung noch ?
Dann solltest du auf alle Fälle mal hierauf einen Blick werfen:
http://wiki.freepascal.org/Multithreaded_Application_Tutorial/de
http://wiki.freepascal.org/Multithreaded_Application_Tutorial/de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Läuft die Anwendung noch ?
Application.ProcessMessages sollte ebenfalls hilfe für ein gefrorenes Fenster schaffen..
Dan kann man ne Eieruhr laufen lassen oder so, damit man sieht, dass das Programm noch lebt.
Dan kann man ne Eieruhr laufen lassen oder so, damit man sieht, dass das Programm noch lebt.
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Läuft die Anwendung noch ?
Hi,
Application.Processmessages ist hilfreich in einer Schleife mit vielen Durchläufen. Aber wenn die Application von einer Quellcode Zeile bis zur nächsten Quellcode Zeile nur auf einen Server wartet, dann hilft Application.Processmessages nicht weiter.
Gruß
Heiner
Application.Processmessages ist hilfreich in einer Schleife mit vielen Durchläufen. Aber wenn die Application von einer Quellcode Zeile bis zur nächsten Quellcode Zeile nur auf einen Server wartet, dann hilft Application.Processmessages nicht weiter.
Gruß
Heiner
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Läuft die Anwendung noch ?
Also ein zweiten Thread machen ist gerantiert ne hilfreiche lösung.
Nutze ich auch bei einigen anwendungen, allerdings solltest du dir bewusst sein, das dadurch 2 Codes gleichzeitig ausgeführt werden !
Beim zugriff auf speicher können sich die 2 Programme in den Weg kommen;
Beispiel
Du kannst nicht sicher sein das x im 2ten Thread überhaupt noch existiert sobalt die Zeile aufgerufen wird auch ein "If assigned()" könnte eventuell genau so fallen das geprüft wird, die instanz gibt es nich dann wird der speicher bereinigt und dann darauf zugegriffen,...
Informier dich da mal über TCriticalSection
auch interessant: http://wiki.delphigl.com/index.php/Tuto ... ithreading
Nutze ich auch bei einigen anwendungen, allerdings solltest du dir bewusst sein, das dadurch 2 Codes gleichzeitig ausgeführt werden !
Beim zugriff auf speicher können sich die 2 Programme in den Weg kommen;
Beispiel
Code: Alles auswählen
//Thread 1
x := TEdit.Create;
a := 1 + 2;
x.Free;
//Thread 2
x.Text := '42';
Du kannst nicht sicher sein das x im 2ten Thread überhaupt noch existiert sobalt die Zeile aufgerufen wird auch ein "If assigned()" könnte eventuell genau so fallen das geprüft wird, die instanz gibt es nich dann wird der speicher bereinigt und dann darauf zugegriffen,...
Informier dich da mal über TCriticalSection
auch interessant: http://wiki.delphigl.com/index.php/Tuto ... ithreading
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 104
- Registriert: Mi 2. Jun 2010, 17:56
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Läuft die Anwendung noch ?
Hallo Michael, hallo MAC,
hab' mal einen Blick auf Eure Tip's geworfen.
Sind sehr interessant, hab' noch nicht alles verstanden, bleibe aber dran.
Hallo Heiner, ich fürchte, dass Du recht hast.
Dank auch an Displaced, aber die Eieruhr nützt nicht viel, weil es ja die
Programme der Kollegen sind, die mitbekommen sollen, ob meine Anwendung
noch läuft.
M.f.G. Hercules
hab' mal einen Blick auf Eure Tip's geworfen.
Sind sehr interessant, hab' noch nicht alles verstanden, bleibe aber dran.
Hallo Heiner, ich fürchte, dass Du recht hast.
Dank auch an Displaced, aber die Eieruhr nützt nicht viel, weil es ja die
Programme der Kollegen sind, die mitbekommen sollen, ob meine Anwendung
noch läuft.
M.f.G. Hercules
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Läuft die Anwendung noch ?
und wenn du die eigentlichen Aktionen in einem zweiten Thread ausführst und dann über den ersten überprüft ob der zweite noch läuft. wenn die Kollegen das dann wissen sollen wäre z.B. möglich so jede Minute (oder je nach dem wie du das brauchst) eine html Datei per ftp zu uploaden, die Kollegen könnten dann auf einer Website den Status auslesen oder du entwirfst ein zweites Programm welches auf Wunsch dein Programm "anpingt" und den Status zurückerhält. Wenn gar keine Antwort kommt dann sagt man einfach das Programm läuft nicht und sonst gibt man den aktuellen Status des Threads aus.
dabei könnte evtl http://www.martinjakobs.de/media/Lazaru ... 1.2010.pdf helfen
dabei könnte evtl http://www.martinjakobs.de/media/Lazaru ... 1.2010.pdf helfen
www.mcpatcher.net | www.hoeper.me