如何获得在Inno Setup的时间差?(How to get time difference in

2019-07-04 11:39发布

我想写一个while环带超时类似如下...如何在Inno Setup的写的吗?

InitialTime = SystemCurrentTime ();

Timeout = 2000; //(ms)

while (!condition) {    
    if (SystemCurrentTime () - InitialTime > Timeout) {
    // Timed out
       break;
    }
}

谢谢!

Answer 1:

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



文章来源: How to get time difference in Inno Setup?
标签: inno-setup