In diesem Artikel wird anhand von Beispielen kurz die Methode von Delphi zur Implementierung eines Countdowns auf Millisekundenebene beschrieben. Im Allgemeinen kann die Anzahl der Vibrationen des Hochleistungsfrequenzzählers des Systems innerhalb einer Millisekunde ermittelt werden. Wenn die Anzahl der Uhrenvibrationen 10 Millisekunden überschreitet, wird die Anzeige von edit3 aktualisiert, um die tatsächlich verstrichene Zeit seit Beginn der Zählung anzuzeigen Zum Zeitpunkt der Zählung lautet der spezifische Implementierungscode wie folgt:
Unit Unit1;Schnittstellen: Windows, Messages, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mmsystem;type TForm1 = class(TForm) Edit1: TEdit; Edit3: TButton; : TButton; Timer1: TTimer; Label1: TLabel; TLabel; Label3: procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private deklarationen } end; var Form1: TForm1; acttime1,acttime2:smmcount,stimercount,spcount:single; htimeid:integer; iten:integer; procedure timeproc(utimerid, umessage: uint; dw1, dw2: dword) stdcall;implementation{$R *.DFM}//timesetevent callback function procedure proendcount ; begin acttime2:=gettickcount-acttime1; form1.button2.enabled :=false; form1.timer1.enabled :=false; stimercount:=60; timekillevent(htimeid);end; Prozedur timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;begin form1.edit2.text:=floattostr(smmcount); smmcount:=smmcount-0.01;end;procedure TForm1.FormCreate(Sender: TObject);begin button1.caption :='Start countdown'; button2.caption :='Countdown beenden'; button2.enabled :=false; button1.enabled :=true; timer1.enabled :=false; stimercount:=60;end;procedure TForm1.Button1Click(Sender: TObject);var lgtick1,lgtick2,lgper:single;begin button2. aktiviert :=true; button1.aktiviert :=false; timer1.enabled :=true; timer1.interval :=10; protimecallback:=timeproc; htimeid:=timesetevent(10,0,protimecallback,1,1); //Erhalten Sie den Hochleistungsfrequenzzähler at Die Anzahl der Vibrationen in einer Millisekunde queryperformancefrequenz(lgper:=lgper/1000); queryperformancecounter(lgtick1); lgtick2:=lgtick1; spcount:=60; while spcount>0 do begin begin lgtick1 := lgtick2; spcount := spcount - 0.01; floattostr(spcount); application.processmessages; end; end;end;procedure TForm1.Timer1Timer(Sender: TObject);begin edit1.text := floattostr(stimercount:=stimercount-0.01;end;procedure TForm1.Button2Click( Absender: TObject);begin proendcount; //Anzeige der tatsächlich verstrichenen Zeit vom Beginn der Zählung bis zur Zählung showmessage('actual elapsed time'+inttostr(acttime2)+'milliseconds');end;end.