16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"一定時間のウェイト&タイムアウト検出"
おはようさん。わいわいです。
少し前に、「時間待ちをするには」と言う質問が上がってましたんで、
ウチで常日頃、便利に使っているルーチンを紹介します。
type
Ttimeot=DWORD;
const
TICK_PAR_SEC=1000; //一秒あたりの時間定数
// タイムアウト時間設定
function Timeout_Set(time:Ttimeot):Ttimeot;
begin
result:=GetTickCount+time;
end;
//タイムアウト判定
function Timeout_Chk(time:Ttimeot):boolean;
begin
result:= (integer(time-GetTickCount))<0;
end;
//一定時間のウェイト
procedure Timeout_Wait(time:Ttimeot);
var wtime:Ttimeot;
begin
wtime:=Timeout_Set(time);
while not Timeout_Chk(wtime) do
application.processmessage;
end;
使い方は・・・・ほとんどマクロみたいなソースなんで、見れば解ると思いますが、
TimeOut_Set 関数でタイムアウト時間を設定して、戻り値を置いておけば、
TimeOut_Chk 関数で、タイムアウト時間経過していれば true を返します。
これなら、タイマーコンポーネントに頼らずとも、同時に複数のタイムアウト/
時間経過のチェックに使えて何かと便利です。
とりあえず、計測中に GetTickCount がオーバーフローしても、正常に動作します。
#ホンマかいな。
ではでは。
Original document by わいわい 氏 ID:(QZC10252)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|