AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi schnell, schneller, 2 fast 2 furius / TimerProblem
Thema durchsuchen
Ansicht
Themen-Optionen

schnell, schneller, 2 fast 2 furius / TimerProblem

Ein Thema von KoRn117 · begonnen am 9. Feb 2004 · letzter Beitrag vom 10. Feb 2004
 
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#6

Re: schnell, schneller, 2 fast 2 furius / TimerProblem

  Alt 9. Feb 2004, 18:31
Zitat von stoxx:
na es gibt noch einen Multimedia Timer in der unit
Dennoch ist Windows kein Realtime Betriebssystem
Nach meinem Wissen wird ein Thread sowieso nur alle 25 ms bedient (Weiss nicht ob die Zahl richtig ist, was sagen die Fachleute ? )
Wenn also windows gerade was auf der Festplatte sucht, kann wiedermal länger dauern
Kann ich mir nicht vorstellen.

Normaler Timer basiert auf der Interrupt 1ch der wird 18,2 mal pro Sekunde aufgerufen daraus ergiebt sich ein maximales Interval von 55.
Mit WinXp ist der Timer noch etwas schneller geworden dazu weiss ich aber nichts näheres.

Ich bevorzuge Threads für Timer:


Delphi-Quellcode:
type
  TTimer = class(TThread)
  private
    FCount: word;
  public
    constructor create();
    destructor destroy; override;
    procedure Execute; override;
    procedure start;
  published
      
  end;

implementation

procedure TTimer.Execute;
begin
  while not Terminated do
  begin
    Sleep(Fcount);
    .........machewas..................

  end;
end;

constructor TTimer.create();
begin
  inherited create(true);

  FCount := 10;
  

  //FreeOnTerminate := true;
  start;
end;

destructor TTimer.destroy;
begin
  terminate;
  inherited destroy;
end;

procedure TTimer.start;
begin
  resume;
end;
Das dürfte auf eine 1ms genau sein.
Genauere Ergebnisse könnte man noch damit erzielen hat dann aber 100% CPU belastung:
Delphi-Quellcode:
procedure TTimer.Execute;
var c : int64;
begin
  while not Terminated do
  begin
    QueryPerformanceCounter(c);
    if C>=Intervall+altezeit then
    begin
      QueryPerformanceCounter(altezeit);
      ....................MAche was...................
    end;
  end;
end;
  Mit Zitat antworten Zitat
 


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 21:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz