Timer

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

Timer

Beitrag von Hercules »

Hallo an Alle.
Bin lange nicht mehr hier gewesen, aber jetzt habe ich mal wieder ein Problem.
Ich muß eine Anwendung programmieren, die auf unserem Großrechner Daten
zusammenstellt und dann auf den Server holt. Da kann es öfter vorkommen,
dass sich für die Anwendung längere Zeit nichts bewegt, weil die Arbeit auf dem
Großrechner lange dauert und deshalb von dort keine Rückmeldung kommt
und die zu holende Datenmenge schon mal über eine Million Datensätze sein kann.
Damit man aber merkt, daß sich doch noch etwas bewegt, habe ich vor der
Verbindung zum Großrechner einen Timer gestartet, der mir in regelmäßigen
Abständen eine Meldung zukommen läßt, dass die Anwendung noch läuft.
Diese Meldung funktioniert auch, aber wenn ich dann die Daten in der Anwendung
und in eine Textdatei schreiben möchte, dann hört der Timer auf, sobalt ich
die Textdatei öffne und reinschreiben will. Wenn alles erledigt ist, dann macht
der Timer wieder weiter.
Hat jemand eine Ahnung, warum der Timer zwischendurch still steht?
Mit freundlichen Grüßen,
Hercules.

Horst_h
Beiträge: 72
Registriert: Mi 20. Mär 2013, 08:57

Re: Timer

Beitrag von Horst_h »

Hallo,

der Timer hat eine geringe Priorität, wenn eine Anwendung enorme Belastung erzeugt, kann der Timer nicht mehr dazwischen kommen.
Aber ich halte das bei einem Textprogramm für unwahrscheinlich.
Was "sagt" der taskmanager?

Gruß Horst

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: Timer

Beitrag von Hercules »

Hallo Horst,
vielen Dank für Deine schnelle Reaktion.
Der Taskmanager sagt: Keine Rückmeldung.
Ich könnte mir denken, dass das der Grund ist,
warum auch immer.
Jetzt überlege ich schon, ob ich das nicht über
einen nebenher laufenden Thread erledigen könnte.
Vielen Dank für Deinen Denkanstoß.
M.f.G. Hercules.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Timer

Beitrag von MacWomble »

Wäre es nicht besser, den Großrechner nicht vom Hauptprogramm aus zu überwachen? Ein zweites Programm könnte doch diese Aufgabe erledigen und sich dann beim Hauptprogramm zurück melden, wenn die Daten zusammen gestellt sind. Oder eben erst dann das Hauptprogramm wieder aktivieren. Solch eine Überwachung würde ich versuchen, nicht im Hauptthread einer Anwendung laufen zu lassen.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Timer

Beitrag von mse »

Was ist der Timer? Ein TTimer? Der wird aus der main-event-loop bedient. Wenn du nicht in die main-event-loop zurückkehrst oder Application.ProcessMessages() aufrufst kann TTimer keine events feuern,.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Timer

Beitrag von af0815 »

Ich gehe davon aus, das du die Daten in einer Schleife ausliest, da würde ich alle 100 oder 1000 oder 10.000 Durchgänge ein Application.ProcessMessages; einschieben, damit die MainLoop die Messagequeuce bedienen kann und Rückmeldung gibt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Timer

Beitrag von mschnell »

Hercules hat geschrieben: Da kann es öfter vorkommen,
dass sich für die Anwendung längere Zeit nichts bewegt, weil die Arbeit auf dem
Großrechner lange dauert und deshalb von dort keine Rückmeldung kommt

Dafür gibt es Threads.
-Michael

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: Timer

Beitrag von Hercules »

Hallo an Alle,
vielen Dank für Eure Antworten und Radschläge.
Konnte leider nicht so schnell antworten, weil
Grippevirus zugeschlagen hat.
Ich habe mich jetzt doch dazu entschieden
einen Thread neben dem Hauptpgogramm
laufen zu lassen.
Vielen Dank nochmal,
Gruß Hercules.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Timer

Beitrag von mschnell »

Ich vermute, Du kommunizierst per TCP/IP mit dem Host.
Du kannst natürlich das ganze Protokoll in einem Thread abwickeln.
Du kannst aber auch im Thread nur auf ein Paket warten und den Inhalt dann per TThread.Queue an den Mainthread schicken und dort ganz normal im Event die Bearbeitung machen.

Dadurch kannst Du vermutlich den größten Teil potentieller Parallel-Zugriffs-Probleme vermeiden.

-Michael

Antworten