我想编写一个while带有超时的循环,如下所示...如何在Inno Setup中编写这个?
InitialTime = SystemCurrentTime ();
Timeout = 2000; //(ms)
while (!condition) {
if (SystemCurrentTime () - InitialTime > Timeout) {
// Timed out
break;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
要在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;
Run Code Online (Sandbox Code Playgroud)
上面的函数并不完美,在极少数情况下,计数器溢出时运行(一旦机器连续运行49.7天),因为一旦发生溢出就会超时(可能在所需的等待之前) ).
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |