Läuft die Anwendung noch ?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
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 ?

Beitrag von Hercules »

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.

Benutzeravatar
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 ?

Beitrag von m.fuchs »

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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Hercules
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 ?

Beitrag von Hercules »

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!

Benutzeravatar
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 ?

Beitrag von m.fuchs »

Dann solltest du auf alle Fälle mal hierauf einen Blick werfen:
http://wiki.freepascal.org/Multithreaded_Application_Tutorial/de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Displaced
Beiträge: 83
Registriert: So 12. Jul 2009, 10:08

Re: Läuft die Anwendung noch ?

Beitrag von Displaced »

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.

Heinrich Wolf
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 ?

Beitrag von Heinrich Wolf »

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

MAC
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 ?

Beitrag von MAC »

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

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;

Hercules
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 ?

Beitrag von Hercules »

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

Bauer321
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 ?

Beitrag von Bauer321 »

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
www.mcpatcher.net | www.hoeper.me

Antworten