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秒。除了可以预加载正在显示的位图之外。