程序就差最后1步了。求大神支招关于_Timer_SetTimer 函数问题
本帖最后由 jienis 于 2012-6-16 00:32 编辑我的程序利用了_Timer_SetTimer 函数,
每60秒执行1次我定义的A函数,我在窗体放了1个倒计时,60到计到1之后又恢复60到1
但问题来了,我的A函数包括一些IE的操作,大家都知道IE打开网页需要时间,这个时间是不确定的,有时网速慢点或其他原因,开起来就慢点。。
就是因为这样,导致我的的60秒倒计时拖长了。。。经过我测试,60到计到1,执行了A,但此时1不是我想象的中的马上变为60再到计,而是在1卡住了,则到A函数执行网页操作完毕了,再从60开始。。
这样导致了延迟,或许这样的延迟不算什么,但在一个每隔1段时间开奖的网页中,我的自动投注程序就因为延迟而导致无法投注了。。
有什么办法,就是60倒计到1,再60倒1,中间A函数不管是否执行完,都不理了,因为我60秒足够它慢慢投注了,就算天塌下来也不理了,反正就是强制倒数强制执行。。
程序就差这个问题了,麻烦牛人给个思路,感激不尽。。 计时应该和A函数分开执行。
无代码,没法分析 回复 2# afan
已经分开了。。。我把要执行的一系列操作都在A函数,而_Timer_SetTimer 我只是用来倒计时变量Q从60一直减到1,倒计时里,用IF判断是变量Q否为1,是的话,就执行A,然后再给Q赋值60。。。。。 回复afan
用IF判断是变量Q否为1,是的话,就执行A,然后再给Q赋值60 ...
jienis 发表于 2012-6-16 00:57 http://www.autoitx.com/images/common/back.gif
就是这里的问题,这不算分开… 回复 4# afan
那给个思路,说说逻辑结构就可以了。 If $Q = 1 Then AdlibRegister('A', 10)
Func A()
AdlibUnRegister()
... 回复 6# afan
我百度之后也发现有这样的AdlibRegister函数,你代码里的10是啥意思呢 回复 7# jienis
au3自带的一个函数,类似计时器,10是每10秒执行一次A函数,具体细节请看帮助文档 回复 8# komaau3
和计时器无关,可能说多进程同步更合适点 同意蛋老大的话!
我看楼主为定时器专门写个EXE吧, 定时调用带有A函数的另一EXE. AU3的类AdlibRegister函数,也是受程序运行的影响的,除非是多线程
实在不行就多进程呗 回复 11# auto
解决咯,可以了。。。_Timer_SetTimer 跟AdlibRegister结合。。。倒计时用AdlibRegister,加一个开关0跟1,。。。再用_Timer_SetTimer 每隔1秒判断开关来执行A函数。。。就可以了。。。。自己捣鼓。。。可以用。。 LZ 如果有简单源码例子应该早就解决了。
要做到LZ的要求实现的方法不少,这里写了个简单例子,给需要的朋友参考#include <Timers.au3>
Local $hGUI = GUICreate('_Timer_SetTimer 倒计时+任务例子', 350, 100)
Local $Label1 = GUICtrlCreateLabel('20秒倒计时中…', 8, 8, 340, 12)
Local $Label2 = GUICtrlCreateLabel('20', 120, 40, 100, 30, 0x01)
GUICtrlSetFont(-1, 20, 800, 0, '微软雅黑')
GUISetState()
Global $QS = 20, $Q = $QS, $iLast = 1
$iTimer = _Timer_SetTimer($hGUI, 1000, '_DJS')
While GUIGetMsg() + 3 <> 0
WEnd
_Timer_KillTimer($hGUI, $iTimer)
GUIDelete()
Func _DJS($1, $2, $3, $4)
#forceref $1, $2, $3, $4
$Q -= 1
If $Q = 0 Then
$Q = $QS
If $iLast Then AdlibRegister('_A', 10)
EndIf
GUICtrlSetData($Label2, $Q)
EndFunc ;==>_DJS
Func _A()
AdlibUnRegister()
$iLast = 0
GUICtrlSetData($Label1, '正在投票啥的… 如有超时则增加新一轮倒计时')
Sleep(Random(5000, 30000, 1)) ;模拟5S - 30S(超出单次倒计时范围)延时
$iLast = 1
GUICtrlSetData($Label1, '投票完毕,等待下一个倒计时完成…')
EndFunc ;==>_A 回复 12# jienis
只是临时性解决。当主程序有模块或函数运行起adlibereagister 注册的时间就会不准。。。 Ie类操作非要在1秒内完成?没完成也要重新执行意义不是很大。
页:
[1]
2