我想写一个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;
}
}
谢谢!
为了使其在创新安装简单,可以使用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天持续运行)的时刻运行,因为它会尽快溢出发生超时(也许之前所需等待的罕见病例 )。