Timer Inno设置计时器持续时间

Timer Inno设置计时器持续时间,timer,inno-setup,Timer,Inno Setup,我刚刚创建了一个旋转横幅,在下载过程中显示一些图像 我使用了这里的例子 function WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord; external 'wrapcallback@files:InnoCallback.dll stdcall'; function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT; lpTimerFunc: UINT):

我刚刚创建了一个旋转横幅,在下载过程中显示一些图像

我使用了这里的例子

 function WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord;
  external 'wrapcallback@files:InnoCallback.dll stdcall';    
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT; lpTimerFunc: UINT):    UINT;         external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL; 
  external 'KillTimer@user32.dll stdcall'; 

 procedure OnSlideTimer(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR; SysTime: DWORD);
begin
  case SlideID of 
    0: SlideID := 1;
    1: SlideID := 2;
    2: SlideID := 3;
    3: SlideID := 4;
    4: SlideID := 5;
    5: SlideID := 0;
  end;
  BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\' + IntToStr(SlideID + 1))+ ExpandConstant('{cm:imgbase}.bmp'));

 end;

procedure StartSlideTimer;
var
  TimerCallback: LongWord;
begin
  TimerCallback := WrapTimerProc(@OnSlideTimer, 4);

  TimerID := SetTimer(0, 0, 7000, TimerCallback);
 end;
我将计时器设置为7秒后启动。。。但是我看到2次改变之间的时间总是不同于7秒,而且所有的改变都是不同的。(如7秒、3秒、6秒……不同)


有什么问题?

这是因为
WM_TIMER
消息(由
TimerProc
回调函数处理)在消息队列中的优先级较低,并且Windows计时器不准确。但是我不想相信时间上有如此巨大的差异(一个间隔为7秒的计时器会产生例如3秒的滴答声)。如果你能产生频繁的滴答声(比如说100毫秒),并测量从最后一个滴答声到当前滴答声的持续时间(通过
GetTickCount
函数获得),你可以使它更精确如果该值大于7000,则间隔7秒。除了可以预加载正在显示的位图之外。