AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Timer mit timeSetEvent pausiert bei z..B. Disk I/O
Thema durchsuchen
Ansicht
Themen-Optionen

Timer mit timeSetEvent pausiert bei z..B. Disk I/O

Ein Thema von Aremo · begonnen am 2. Nov 2011 · letzter Beitrag vom 2. Nov 2011
Antwort Antwort
Aremo

Registriert seit: 24. Nov 2009
Ort: Aachen
9 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Timer mit timeSetEvent pausiert bei z..B. Disk I/O

  Alt 2. Nov 2011, 12:14
Hallo, ich habe einen Timer mit timeSetEvent erzeugt,

Timer_ID := timeSetEvent( Interval_inMSec, 0, @exec_routine, 0, TIME_PERIODIC );

der bislang zuverlässig funktioniert hat und alle 1 bis 10 mSec die Routine exec_routine ausführt.

Jetz ist jedoch aufgefallen, dass bei Disk I/O (schreiben einer Datei auf Platte) zum Beispiel der Timer jedoch pausiert, bis die Datei fertig geschrieben ist - was bei langsamen externen Medien bis zu 1 Sec oder mehr dauern kann. In der exec_routine wird ein Thread gestartet, der die höchste Priorität TimeCritical hat, aber was nützt mir die höchste Priortät dieses Threads, wenn der das Timer Event von "timeSetEvent" in solchen Fällen das Ausführen der exec_routine gar nicht erst ausgelöst wird.

QueryPerformanceFrequency( 1000 ) und QueryPerformanceCounter scheint auch keine ALternative zu sein, da mit QueryPerformanceCounter nur der Counter-Wert ausgelesen werden kann, die Routine aber selbst nicht die Ausführung eines Events oder routine einleiten kann. Die Implementierung einer Endlos-Schleife und Prüfung,ob der neue PerformanceCounter Wert erreicht ist führt jedoch zur sinnloser CPU-Belastung.

Gibt es eine Möglichkeit, die Priorität des Aufrufs selber hoch zu setzen oder eine andere Möglichkeit das pausieren zu vermeiden ? Habe schon die Forenbeitrage durchsucht, aber keine passende Lösung entdecken können.

Die Möglichkeit das Schreiben auf Platte in einen niedrig priorisierten Thread zu verlagern habe ich noch nicht getestet, allerding gibt es im Programm noch andere Events (mit onButtonPress ausgelöst) die auch den Timer pausieren lassen.
Gottfried Arens - Soft-dynamics.de
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Timer mit timeSetEvent pausiert bei z..B. Disk I/O

  Alt 2. Nov 2011, 12:45
Ist heute timeSetEvent-Tag?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Timer mit timeSetEvent pausiert bei z..B. Disk I/O

  Alt 2. Nov 2011, 12:48
Hierzu hätte ich eine grundsätzliche Frage, ist das Teil überhaupt sinnvoll einsetzbar, da der Code im Threadkontext ausgeführt wird.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Aremo

Registriert seit: 24. Nov 2009
Ort: Aachen
9 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Timer mit timeSetEvent pausiert bei z..B. Disk I/O

  Alt 2. Nov 2011, 13:29
Zur grundsätzlichen Frage:
Das Timer Event soll einfach nur Daten regelmäßig aus Schnittstelle abrufen und in einem Buffer speichern und einen Buffer-Pointer entsprechend hochzählen, sodass eine andere Routine regelmäßig nachschauen und auswerten kann. Anhand des Pointers auf das letzte Datenelement kann der jeweilige Stand abgelesen werden. Nur pausieren sollte das Abspeichen halt nicht.

Zum TimerSetEvent Tag:
Habe gerade gesehen ,dass auch Antworten dort
http://www.delphipraxis.net/158000-t...ml#post1133964
eingtroffen sind und werde Antworten auch dort eingeben. Danke für den Hinweis.
Gottfried Arens - Soft-dynamics.de
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Timer mit timeSetEvent pausiert bei z..B. Disk I/O

  Alt 2. Nov 2011, 13:53
Oh, jetzt sehe ich erstmal, dass der andere Thread ja ein älterer ist, der von deiner Antwort hochgelupft wurde. Ups Aber die Probleme sind ja nicht unverwandt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 10:36 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