この記事では、ミリ秒レベルのカウントダウンを実装する Delphi の方法を例とともに簡単に説明します。一般的に、システムの高性能周波数カウンタの 1 ミリ秒以内の振動数が取得できますが、クロック振動数が 10 ミリ秒を超えると、edit3 の表示が更新され、カウント開始からの実際の経過時間が表示されます。カウントするまでの具体的な実装コードは次のとおりです。
ユニット Unit1; インターフェイスは Windows、メッセージ、SysUtils、クラス、グラフィックス、コントロール、フォーム、ダイアログ、ExtCtrls、StdCtrls、mmsystem を使用します。タイプ TForm1 = class(TForm) Edit1: TEdit2: TEdit Button2; : T ボタン; T タイマー 1: T ラベル 2: TLabel; Label3: TLabel; プロシージャ FormCreate(Sender: TObject); プロシージャ Timer1Timer(Sender: TObject); var Form1: TForm1、acttime2: カーディナル; htimeid:integer; iten:integer; protimecallback:tfntimecallback; プロシージャ timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) プロシージャ proendcount;implementation{$R *.DFM}//timesetevent コールバック関数プロシージャ proendcount ; begin acttime2:=gettickcount-acttime1;フォーム1.ボタン2.有効化:= true; smmcount:= 60; タイムキルイベント(htimeid);プロシージャ 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 :='カウントダウン開始'; :='カウントダウンの終了'; button2.enabled :=false; timer1.enabled :=false; stimercount:=60;end;プロシージャ TForm1.Button1Click(Sender: TObject);var lgtick1,lgtick2,lgper:tlargeinteger;有効:=true; button1.有効:=false; timer1.enabled :=true; timer1.interval :=10; protimecallback:=timeproc; htimeid:=timesetevent(10,0,protimecallback,1,1); // システムの高性能周波数カウンターを取得します。 at 1 ミリ秒間の振動数 queryperformancefrequency(lgper) ftemp:=lgper/1000; iten:=trunc(ftemp*10); queryperformancecounter(lgtick1); lgtick2:=lgtick1; spcount:=60; while spcount>0 do begin queryperformancecounter(lgtick2); // クロック振動数が 10 ミリ秒を超えた場合、edit3 の表示を更新します if lgtick2 - lgtick1 then開始 lgtick1 := lgtick2; spcount := spcount - 0.01; floattostr(spcount); アプリケーション.プロセスメッセージ; 終了; 終了; プロシージャ TForm1.Timer1Timer(Sender: TObject); 開始 edit1.text := floattostr(stimercount);送信者: TObject);begin proendcount; //カウント開始からカウントまでの実経過時間を表示 showmessage('実際の経過時間'+inttostr(acttime2)+'ミリ秒');end;end。