AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehlermeldung "Nicht genügend Timer verfügbar"
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung "Nicht genügend Timer verfügbar"

Ein Thema von haentschman · begonnen am 13. Jul 2023 · letzter Beitrag vom 14. Jul 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 11:40
Hallöle...

In den letzten 2 Wochen hatte ich folgende Meldung 2x:
Zitat:
exception class : EOutOfResources
exception message : Nicht genügend Timer verfügbar.

main thread ($3e44):
00b77240 +064 SEAM.exe Vcl.ExtCtrls 3215 +4 TTimer.UpdateTimer
00b77274 +008 SEAM.exe Vcl.ExtCtrls 3223 +3 TTimer.SetEnabled
03a6d358 +058 SEAM.exe Form.Receipt 947 +4 TfoReceipt.DoOnReceiptAfterScroll
Ich der Anwendung habe ich nur 2 Timer für die Verzögerung beim Scroll für das Laden der Detaildaten.

...weil ich das erste Mal das ignoriert hatte, weiß ich nicht, ob es der selbe Arbeitsplatz war.

PS: die Tante ist mit diesem Fehler und Delphi/VLC dürftig. Da war nur von Skins die Rede.
PS: Die Timer sind schon seit Jahren drin...problemlos.

Was kann ich noch kontrollieren?

Danke

Geändert von haentschman (13. Jul 2023 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
618 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 12:54
Hey, ich erinnere mich sowas vor Jahren mal gesehen zu haben. Da hatte ich versucht Timer mehrmals pro Sekunde an und aus zu schalten.
Es scheint so zu sein dass jedesmal intern ein neuer Timer erzeugt wird. Die alten aber nicht sofort freigegeben werden.
Damals konnte man damit den Rechner zu einem Freeze/Bluescreen bewegen.

Ich verwende so gut wie überhaupt keine TTimer mehr. Sondern eigene Threads die via QueryPerformanceCounter arbeiten.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 12:56
http://www.delphigroups.info/2/35/440863.html
Zitat:
If you have a look in the VCL source you will see that this message is generated whenever SetTimer fails - regardless of the reason for that failure, which might have nothing to do with insufficient timers being available. Bear in mind that TTimer component calls SetTimer a LOT - everytime enabled is changed or the interval is altered. I recall a case once when this error was being generated because the FWindowHandle field of TTimer was being corrupted. This caused SetTimer to fail (InvalidHandle) but the error message was 'Not enough timers available' - which was very misleading in this case.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 13:17
Danke...

Zitat:
Da hatte ich versucht Timer mehrmals pro Sekunde an und aus zu schalten.
Es scheint so zu sein dass jedesmal intern ein neuer Timer erzeugt wird.

...again what learned.

Zitat:
error message was 'Not enough timers available' - which was very misleading in this case
+ 1

Fazit: Kannst machen nix, mußt du gucken zu...

Zitat:
Da hatte ich versucht Timer mehrmals pro Sekunde an und aus zu schalten.
...das passiert ja mit dem Scrollen.
...wieder Arbeit...Umbau auf Thread.
Miniaturansicht angehängter Grafiken
timer.png  

Geändert von haentschman (13. Jul 2023 um 13:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 13:33
SetTimer kennt nicht nur OutOfRessources ... tja, wenn man GetLastError/SysErrorMessage vergisst und nicht den "richtigen" Fehler anzeigt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
618 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 14:16
TTimer ist aus meiner Sicht gruselig implementiert. Erfüllt aber sicher seinen Zweck für den er gedacht ist.

Wenn ich deinen Fall richtig verstehe, also eine verzögerte Aktion nach einer Scrollaction auszuführen, ist villeicht ein ganz anderer Ansatz sinnvoller.
Am Ende brauchst du ja nur ein Event für deine Aktion, aber sicher nicht für jedes ScollEvent, sondern nur einmal nach dem letzten ScrollEvent.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 15:03
Nunja, es gibt/gab keine Möglichkeit rauszufinden welcher Timer vorhanden/aktiviert ist.

Drum nutzen die einfach immer blind ID 0, mit jeweils einem eigenem Fenster.
Die andere Variante wäre ja z.B. im Owner-Fenster den Timer zu nutzen, aber wenn du mehrere TTimer und/oder sonstwas hast, dann müssten irgendwie die IDs verteilt werden.

Und im FMX dann nochmal verschachtelt, oder gar ganz anders, für andere Platformen.




Es gibt noch eine/mehrere andere uralte MultiMediaTimer-APIs, welche z.B. mit einem Thread arbeiten, anstatt mit Window-Messages.
z.B. MSDN-Library durchsuchenCreateTimerQueueTimer
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jul 2023 um 15:06 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#8

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 16:13
Ein weiteres Problom könnte sein, dass der Timer bereits wieder ausgelöst wird, während die Timerroutine noch nicht vollständig abgearbeitet ist.

Seit dem ich bei Timerroutinen zuerst den Timer ausschalte und am Ende wieder einschalte, hab' ich das Problem nicht mehr gehabt.
Delphi-Quellcode:
procedure Tform1.tmTimer(Sender: TObject);
begin
  tm.Enabled := false;
  // tu mal was
  tm.Enabled := true;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 16:58
Ein weiteres Problom könnte sein, dass der Timer bereits wieder ausgelöst wird, während die Timerroutine noch nicht vollständig abgearbeitet ist.
Ich glaube, das ist technisch nicht möglich, da weitere Timer-Events erst beim nächsten Abarbeiten der Message Queue auftauchen würden. Es kann also schon sein, dass nach Abarbeiten des Timer-Events bereits ein weiterer Event ansteht, aber eben erst nach dem Beenden des Events. Die Timer-Messages werden ja nur nach Anfrage erzeugt. Solange also niemand (auch nicht indirekt) innerhalb des Event-Codes ein PeekMessages aufruft, sollte auch keine neue Timer-Message in der Queue landen.

Das ist ja auch einer der Gründe, warum man kein Application.ProcessMessages aufrufen soll, denn dann könnte tatsächlich der Eventhandler rekursiv aufgerufen werden. Dann nutzt aber das Disablen des Timers auch nicht wirklich viel, da das ein Re-Entering nicht 100%ifg verhindern kann - es könnten ja schon weitere Timer-Messges in der Queue sein. Das Disable/Enable erzeugt aber unnötig weitere KillTimer/SetTimer Aufrufe und belastet das System eigentlich mehr als es hilft.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#10

AW: Fehlermeldung "Nicht genügend Timer verfügbar"

  Alt 13. Jul 2023, 17:55
Das mag theoretisch alles so stimmen, meine praktische Erfahrung mit Delphi 7 ist halt, dass das Problem bei mir seit gefühlt 10 Jahren nicht mehr auftritt, seitdem ich die Timer zuerst auf Enabled Disabled setze, dann die Timerlogik abarbeiten lasse und dann den Timer wieder auf Enabled setze.

Und nein, schön find' ich das nicht, aber besser als ab und an 'ne Exception wegen Timerfehlern

Geändert von Delphi.Narium (14. Jul 2023 um 09:04 Uhr) Grund: Da hatte ich doch glatt Enabled und Disabled durcheinandergewürfelt und beim Korrekturlesen nicht mal gemerkt :-(
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:56 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