Cet article décrit brièvement la méthode Delphi d'implémentation d'un compte à rebours au niveau de la milliseconde avec des exemples. D'une manière générale, le nombre de vibrations du fréquencemètre haute performance du système en une milliseconde peut être obtenu. Si le nombre de vibrations de l'horloge dépasse 10 millisecondes, l'affichage de edit3 sera rafraîchi pour afficher le temps réellement écoulé depuis le début du comptage. au moment du comptage. Le code de mise en œuvre spécifique comme suit :
unité Unit1;interfaceutilise Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mmsystem;type TForm1 = class(TForm) Edit1 : TEdit2 : TEdit3 : TEdit Button1 ; : TButton ; Timer ; Étiquette1 : Étiquette2 ; TLabel ; Label3 : TLabel ; procédure FormCreate (Expéditeur : TObject); procédure Button1Click (Expéditeur : TObject); procédure Timer1Timer (Expéditeur : TObject); var Form1 : TForm1 ; acttime1,acttime2 :smmcount,stimercount,spcount :single ; htimeid:integer iten:integer; protimecallback:tfntimecallback; procédure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall; procédure proendcount;implémentation{$R *.DFM}//timesetevent fonction de rappel proendcount ; commencer acttime2 :=gettickcount-acttime1 ; form1.button2.enabled :=false; form1.button1.enabled :=true; form1.timer1.enabled :=false; stimercount:=60; timekillevent(htimeid);end; procédure 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 :='Démarrer le compte à rebours'; :='Fin du compte à rebours'; bouton2.enabled :=false; bouton1.enabled :=true; timer1.enabled :=false; smmcount:=60; stimercount:=60; spcount:=60;end;procedure TForm1.Button1Click(Expéditeur: TObject);var lgtick1,lgtick2,lgper:tlargeinteger; activé :=true; bouton1.enabled :=false; timer1.enabled :=true; timer1.interval :=10; protimecallback:=timeproc; htimeid:=timesetevent(10,0,protimecallback,1,1); at Le nombre de vibrations en une milliseconde queryperformance Frequency(lgper); ftemp:=lgper/1000; queryperformancecounter(lgtick1); lgtick2:=lgtick1; while spcount>0 do start queryperformancecounter(lgtick2); //Si le nombre de vibrations de l'horloge dépasse 10 millisecondes, actualisez l'affichage de edit3 if lgtick2 - lgtick1 > iten then commencer lgtick1 := lgtick2; spcount := spcount - 0.01; floattostr(spcount); application.processmessages; end; end;procedure TForm1.Timer1Timer(Sender: TObject);begin edit1.text := floattostr(stimercount:=stimercount-0.01;end;procedure TForm1.Button2Click( Expéditeur : TObject);commencer proendcount; //Affiche le temps réellement écoulé depuis le début du comptage jusqu'au décompte showmessage('actual elapsed time'+inttostr(acttime2)+'milliseconds');end;end.