Este artigo descreve brevemente o método Delphi para implementar a contagem regressiva em nível de milissegundos com exemplos. De modo geral, o número de vibrações do contador de frequência de alto desempenho do sistema dentro de um milissegundo pode ser obtido. Se o número de vibrações do relógio exceder 10 milissegundos, a exibição do edit3 será atualizada para exibir o tempo real decorrido desde o início da contagem. para o tempo de contagem. O código de implementação específico é o seguinte:
unit Unit1;interfacea Windows, Mensagens, SysUtils, Classes, Gráficos, Controles, Formulários, Diálogos, ExtCtrls, StdCtrls, mmsystem;tipo TForm1 = class(TForm) Edit1: TEdit2: TEdit3: TButton; : TButton1: TTimer; TLabel; Label3: TLabel; procedimento FormCreate(Sender: TObject); private { Declarações privadas } public { Declarações públicas } end; var Form1: TForm1; acttime1,acttime2:smmcount,stimercount,spcount:single; htimeid:integer; iten:integer; protimecallback:tfntimecallback; procedimento timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;implementação{$R *.DFM}//timesetevent procedimento de função de retorno proendcount ; começar acttime2:=gettickcount-acttime1; form1.button2.enabled :=false; form1.button1.enabled :=true; form1.timer1.enabled :=false;stimercount:=60; procedimento timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;begin form1.edit2.text:=floattostr(smmcount);=smmcount-0.01;end;procedure TForm1.FormCreate(Sender: TObject);begin button1.caption :='Iniciar contagem regressiva'; :='Terminar contagem regressiva'; button2.enabled :=false; button1.enabled :=true; timer1.enabled :=false; smmcount:=60; stimercount:=60;end;procedure TForm1.Button1Click(Sender: TObject);var lgtick1,lgtick2,lgper:tlargeinteger; habilitado :=verdadeiro; botão1.enabled :=falso; timer1.enabled :=true; timer1.interval :=10; protimecallback:=timeproc; at O número de vibrações em um milissegundo queryperformancefrequency(lgper); queryperformancecounter(lgtick1);=lgtick1; spcount:=60; while spcount>0 do start queryperformancecounter(lgtick2 > iten then); começar lgtick1 := lgtick2; floattostr (spcount); application.processmessages end; end; procedimento TForm1.Timer1Timer (Sender: TObject); Remetente: TObject);begin proendcount; //Exibe o tempo real decorrido desde o início da contagem até a contagem showmessage('actual elapsed time'+inttostr(acttime2)+'milliseconds');end;end.