Timer

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

Timer

Beitragvon Hercules » 2. Feb 2018, 08:18 Timer

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.
Hercules
 
Beiträge: 104
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Horst_h » 2. Feb 2018, 08:48 Re: Timer

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
Horst_h
 
Beiträge: 50
Registriert: 20. Mär 2013, 08:57

Beitragvon Hercules » 2. Feb 2018, 09:05 Re: Timer

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.
Hercules
 
Beiträge: 104
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon MacWomble » 2. Feb 2018, 09:19 Re: Timer

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.
MacWomble
 
Beiträge: 447
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.40 (FPC 3.1.1 Rev 38039) | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon mse » 2. Feb 2018, 09:26 Re: Timer

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,.
mse
 
Beiträge: 1792
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.2,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon af0815 » 2. Feb 2018, 16:33 Re: Timer

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).
af0815
 
Beiträge: 3322
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mschnell » 5. Feb 2018, 16:23 Re: Timer

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
mschnell
 
Beiträge: 3172
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon Hercules » 6. Feb 2018, 09:49 Re: Timer

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.
Hercules
 
Beiträge: 104
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon mschnell » 6. Feb 2018, 15:34 Re: Timer

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
mschnell
 
Beiträge: 3172
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried