xms77 发表于 2011-9-27 15:57:03

定时器问题求解

本帖最后由 xms77 于 2011-9-27 15:58 编辑

自己做了一个定时器,没有用AU3自带的AdlibRegister函数,一开始定时器1看似工作正常,但是后来发现如果处理任务的时间超过定时时间间隔,定时器会出现失效1小时的情况发生,于是后来修改了定时器1,变成定时器2,基本解决了这个问题。不知道如果用AdlibRegister函数的话,用什么方法来解决这个问题?

定时器1$Threshold_time = @MIN
$Rightnow_Min = @MIN
$Time_interval = 1   ;间隔时间为1分钟
while
        $Rightnow_Min = @MIN
        If $Rightnow_Min = $Threshold_time Then            ;如果当前的分钟和指定的分钟相符
   
                $Threshold_time = $Rightnow_Min + $Time_interval         ; 更新下一次做任务的分钟
                If $Threshold_time >= 60 Then $Threshold_time = $Threshold_time - 60             ;如果下一次的指定分钟超过60,则减去60
               
                ;.........
                ;.......
                ;....
                ;...
                MsgBox(0,"next time is ","I am doing task now.")
                               
        EndIf
        Sleep(100)
WEnd定时器2$Threshold_time = @MIN
$Rightnow_Min = @MIN
$Time_interval = 1   ;间隔时间为1分钟
while
        $Rightnow_Min = @MIN
        If $Rightnow_Min = $Threshold_time Then            ;如果当前的分钟时间和指定的分钟时间相符
   
                $Threshold_time = $Rightnow_Min + $Time_interval         ; 更新下一次的有效分钟时间
                If $Threshold_time >= 60 Then $Threshold_time = $Threshold_time - 60             ;如果下一次的指定分钟超过60,则减去60
                $timeA = @MIN      ;任务开始时间
                ;.........
                ;.......
                ;....
                ;...
                MsgBox(0,"next time is ","I am doing task now.")
                $TimeB = @MIN       ;任务完成时间
                If $TimeB < $timeA Then $TimeB = $timeb + 60      ;说明已经进入下一个小时
                If $TimeB - $timeA >= $Time_interval Then $Threshold_time = $TimeB;如果任务处理时间超出定时时间间隔   
                If $Threshold_time >= 60 Then $Threshold_time = $Threshold_time - 60 ; 修正下次触发任务的阀值时间,如果超过60,就减去60
               
        EndIf
        Sleep(100)
WEnd
页: [1]
查看完整版本: 定时器问题求解