我想写一个while
像下面这样的超时循环......如何在 Inno Setup 中写这个?
InitialTime = SystemCurrentTime ();
Timeout = 2000; //(ms)
while (!condition) {
if (SystemCurrentTime () - InitialTime > Timeout) {
// Timed out
break;
}
}
谢谢!
我想写一个while
像下面这样的超时循环......如何在 Inno Setup 中写这个?
InitialTime = SystemCurrentTime ();
Timeout = 2000; //(ms)
while (!condition) {
if (SystemCurrentTime () - InitialTime > Timeout) {
// Timed out
break;
}
}
谢谢!
为了简化 Inno Setup,您可以使用GetTickCount
调用。
GetTickCount 函数的分辨率受限于系统计时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。
因此,它不会恰好在 2000 毫秒(或您想要的任何值)处超时,但足够接近可以接受。
您必须注意的其他限制是:
经过的时间存储为 DWORD 值。因此,如果系统连续运行 49.7 天,时间将归零。
在代码中,它显示如下:
[Code]
function GetTickCount: DWord; external 'GetTickCount@kernel32 stdcall';
procedure WaitForTheCondition;
const
TimeOut = 2000;
var
InitialTime, CurrentTime: DWord;
begin
InitialTime := GetTickCount;
while not Condition do
begin
CurrentTime := GetTickCount;
if ((CurrentTime - InitialTime) >= TimeOut) { timed out OR }
or (CurrentTime < InitialTime) then { the rare case of the installer running }
{ exactly as the counter overflows, }
Break;
end;
end;
上述功能并不完美,在极少数情况下,计数器溢出时正在运行(机器每49.7天连续运行一次),因为一旦发生溢出它就会超时(可能在所需的等待之前) )。