AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Timer

Ein Thema von ASKtec · begonnen am 22. Nov 2023 · letzter Beitrag vom 22. Nov 2023
Antwort Antwort
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#1

Probleme mit Timer

  Alt 22. Nov 2023, 10:33
Hallo zusammen,

ich bräuchte mal etwas Schützenhilfe bei einem Problem.

Ich habe ein Tool mit einem optional aktivierbaren Timer. Dieser Timer dient als Zeitcounter um z.B. alle 30 Sekunden eine Funktion aufzurufen welche dann diverse Jobs erledigt. Diese Funktion habe ich schon seit Jahren so im Einsatz. Jetzt vermehren sich plötzlich bei den ein oder anderen Anwender meines Tools ein seltsamer Effekt. Die Programmoberfläche lässt sich nicht mehr bedienen, reagiert auf keinen Klick mehr. Das Programmmenü ist nicht mehr bedienbar und das Programm lässt sich auch nicht mehr über das Taskicon beenden. Wird das Programm neu gestartet > gleiches Verhalten. Allerdings läuft der Timer nach wie vor im Hintergrund und verrichtet seinen Dienst, das Tool macht also alles was es soll, ich kann nur die Oberfläche nicht mehr bedienen.
Deaktiviere ich dann den Timer über die gespeicherten Einstellungen (ini-Datei) und starte das Programm neu, reagiert es ganz normal.

Dieses Verhalten habe ich aktuell bei 2 oder 3 Anwendern. Ich finde allerdings keinen Auslöser für dieses Verhalten. Hat hier vielleicht jemand eine Idee wo ich ansetzen kann um den Auslöser zu finden?

Delphiversion: 11.3
32-bit Anwendung

Betriebssystem bei den Anwendern ist Windows 11 Pro (64-bit)

Vielen Dank im Voraus.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Probleme mit Timer

  Alt 22. Nov 2023, 10:50
.. wenn Aktionen in einem Timer angestossen werden sind diese nicht vom MainTask getrennt.
Sind es also Zeitintensive Aktione - kann es passieren das der MainTask blockiert wird.

Vielleicht hilft es, wenn Du die Sachen in einen Task oder Thread packst.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit Timer

  Alt 22. Nov 2023, 10:52
Der Timer läuft wahrscheinlich in eine Endlosschleife, innerhalb der kein ProzessMessages aufgerufen wird.

Auch denkbar, im Timer-Ereignis wird ProzessMessages aufgerufen, dauert die Abarbeitung aber bereits zu lange, löst der Timer dabei erneut aus und ruft das Ereignis rekursiv auf.
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
346 Beiträge
 
#4

AW: Probleme mit Timer

  Alt 22. Nov 2023, 11:29
Hallo zusammen,

ich bräuchte mal etwas Schützenhilfe bei einem Problem.

Ich habe ein Tool mit einem optional aktivierbaren Timer. Dieser Timer dient als Zeitcounter um z.B. alle 30 Sekunden eine Funktion aufzurufen welche dann diverse Jobs erledigt. Diese Funktion habe ich schon seit Jahren so im Einsatz. Jetzt vermehren sich plötzlich bei den ein oder anderen Anwender meines Tools ein seltsamer Effekt. Die Programmoberfläche lässt sich nicht mehr bedienen, reagiert auf keinen Klick mehr. Das Programmmenü ist nicht mehr bedienbar und das Programm lässt sich auch nicht mehr über das Taskicon beenden. Wird das Programm neu gestartet > gleiches Verhalten. Allerdings läuft der Timer nach wie vor im Hintergrund und verrichtet seinen Dienst, das Tool macht also alles was es soll, ich kann nur die Oberfläche nicht mehr bedienen.
Deaktiviere ich dann den Timer über die gespeicherten Einstellungen (ini-Datei) und starte das Programm neu, reagiert es ganz normal.

Dieses Verhalten habe ich aktuell bei 2 oder 3 Anwendern. Ich finde allerdings keinen Auslöser für dieses Verhalten. Hat hier vielleicht jemand eine Idee wo ich ansetzen kann um den Auslöser zu finden?

Delphiversion: 11.3
32-bit Anwendung

Betriebssystem bei den Anwendern ist Windows 11 Pro (64-bit)

Vielen Dank im Voraus.
First and foremost, don't use ProcessMessage
Now to suggestion
1) Are you using any sort of logging ? just log events and you can time the jobs triggered by the Timer, also the time spend on every job, this logging can be enabled and disabled from command line parameter, or any other method, but with command line you don't need to wait for application settings to be loaded, as loading settings might also be problematic or broken in specific user case.
2) Do you have a clear logic to handle, recover or coup, when and if one of these jobs takes longer than the Timer interval ?
3) Try to reproduce this by decreasing the interval to 30ms instead of 30 second, this might reveal problems on your side, also put some jobs to sleep for long time, then build your logic with that in mind.
4) is there a hidden error message ? like failed to be visible to the user or even to render ? also logging here.

That what comes to mind at this moment, and hope it helps.
Kas
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#5

AW: Probleme mit Timer

  Alt 22. Nov 2023, 15:06
Wenn die Routine im Timer länger dauert als der Timer.Interval,, dann könnte es nach einiger Zeit krachen.
Ich mache es immer so, denn er exakte Timer-Interval ist mir sowieso zu ungenau ...

Delphi-Quellcode:
procedure TForm.TimerProcessTimer(Sender: TObject);
begin
  TimerProcess.Enabled := False; // Halte den Timer an, bis die Aufgabe erledigt ist

  ...
  // Erledige die Aufgabe erst komplett, auch wenn es länger dauert als der Timer-Zyklus
  ...

  TimerProcess.Enabled := True; // Werfe den Timer erst danach wieder an
end;
So bekommt man keine Probleme mit ungewolltem Timer-Flooding, oder auch auf langsameren Rechnern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: Probleme mit Timer

  Alt 22. Nov 2023, 15:38
Das sorgt nur dafür, dass zwischen Ende und neuem Anfang des TimerEvents "neue" 30 Sekunden (Interval) liegen.
Und selbst wenn es jedes Mal mindestens 30 Sekunden benötigt hängt, dann würden dennoch zwischen den Events alle angefallen Events verarbeitet.

So oder so, ist es seine saublöde Idee etwas in einem Timer zu machen, was regelmäßig mindestens / mehr als 30 Sekunden benötigt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Nov 2023 um 15:45 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#7

AW: Probleme mit Timer

  Alt 22. Nov 2023, 15:51
So oder so, ist es seine saublöde Idee etwas in einem Timer zu machen, was regelmäßig mindestens / mehr als 30 Sekunden benötigt.
Ja, Threading wäre in dem Fall natürlich in jedem Fall besser.
Vielleicht ist die Aufgabe ja etwas, das zwingend im UI-Thread ausgeführt werden soll, wie Malen in einem Fenster oder so.
Das Beispiel unten soll ja nur das mögliche Timer-Flooding sicher verhindern, falls das ein Problem für sporadische Fehler darstellen sollte.

Trotzdem könnte auch ein Timer alle 30 Sekunden eine Aufgabe in einem Thread anwerfen, der dann mal 20-40 Sekunden braucht bis er fertig ist.
Auch dann sollte man den Thread vor einem Flooding schützen.
  Mit Zitat antworten Zitat
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#8

AW: Probleme mit Timer

  Alt 22. Nov 2023, 16:06
Danke für Eure Hinweise und Empfehlungen.

Timer-Flooding würde ich ausschließen, da ich in der Tat den Timer anhalte und wieder starte, ähnlich wie es Rollo62 geschrieben hat...

Threading kommt hier in der Tat auch nicht in Frage, da es unter Umständen in der Tat zur Interaktion kommen kann, dann ist der Timer aber meist eh schon deaktiviert.

Ich muss da nochmal in mich gehen und die Abläufe und die Logik nochmal überdenken. Es irritiert mich halt nur, dass sich aktuell die Fälle häufen und voher über Jahre keine Probleme bekannt waren...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz