自定义函数,能给函数指定个超时时间吗?[已解决]
本帖最后由 sdc7 于 2011-8-5 22:35 编辑很多系统函数都有等待的超时时间,超过以后就退去或执行别的,
那没自定义的函数能实现这个功能吗? 这个东西觉得很有意思,如果很好的实现,做很多事,将有更多的排错处理方法了!
比方说做一个无限循环的函数
func a ($time=5000)
for i=1 to 999999999
sleep(1000)
next
endfunc
大家都是TIMEER但是单线程就有问题聊,如果,函数中某个操作卡主,慢吊很吊花, 那换是得得到执行完毕才能执行显示时间!
我的意思是 比方说函数A执行下载一个图片,如果A执行超过3秒就重新下载! 给自定义函数加个超时中断!
其实我的核心意思就是给自定义函数加个时间限制 不能超过多长时间 否则就退出!只是有些函数比方说下载,会一直卡在那里直到读完数据否则不往下执行,所以才要加时间限制! 什么意思,没看懂啊 你是说这样吗?
MsgBox(64,"提示","超时3秒只执行到"&_wait())
Func _wait()
Local $begin = TimerInit()
For $i = 1 To 999999
If TimerDiff($begin) > 3000 Then Return $i
;执行的代码
Next
EndFunc ;==>_wait 你是说这样吗?
风行者 发表于 2011-8-5 00:18 http://www.autoitx.com/images/common/back.gif
他应该是要这个效果了~~ 他应该是要这个效果了~~我就没想过这方面...如果能“提取”msgbox,traytip的超时等待实现方法就更好了,应该不难吧?
等待高手的方法。 “如果能“提取”msgbox,traytip的超时等待实现方法就更好了,应该不难吧?”
意思设置超时几秒就退出函数?
把3楼代码中的修改一下不就好了吗?
func _wait($delay)
....
If TimerDiff($begin) > $delay Then Return $i
这东东很少用上吧? “如果能“提取”msgbox,traytip的超时等待实现方法就更好了,应该不难吧?”
意思设置超时几秒就退出函数 ...
user3000 发表于 2011-8-5 01:38 http://www.autoitx.com/images/common/back.gif
你没理解5楼要表达的意思 回复 5# powerofos
获取messagebox api的参数指针,然后获得数据,不过这个似乎也不太好整 这样也是可以的
#Include <Timers.au3>
Global $iTimer,$title,$text
$Init = TimerInit()
_MsgBox(0,"提示","超时测试",3)
MsgBox(0,"结束时间",TimerDiff($Init))
Func _MsgBox($id,$title,$text,$time)
$iTimer = _Timer_SetTimer(0,$time*1000,"_Timer")
Return MsgBox($id,$title,$text)
EndFunc
Func _Timer($hWnd, $Msg, $iIDTimer, $dwTime)
WinClose($title,$text)
_Timer_KillTimer(0,$iTimer)
EndFunc 这样也是可以的
风行者 发表于 2011-8-5 10:27 http://www.autoitx.com/images/common/back.gif
改了下,直观些...#Include <Timers.au3>
Global $iTimer,$Init,$While = 1
$Init = TimerInit()
_TrayTip("我只是个ToolTip~~~8秒后退出",8)
TrayTip("我才是TrayTip","我才是TrayTip! 8秒后退出",8)
While $While
Sleep(50)
WEnd
Func _TrayTip($text,$time)
$iTimer = _Timer_SetTimer(0,$time*1000,"_Timer")
Return ToolTip($text,@DesktopWidth-230,@DesktopHeight-140)
EndFunc
Func _Timer($hWnd, $Msg, $iIDTimer, $dwTime)
_Timer_KillTimer(0,$iTimer)
ToolTip("")
$While = 0
EndFunc 呵呵,回复好有意思。
楼主有两种思路。
1. 把单条语句的执行时间缩到十毫秒级,由TImer来判断是否退出某个函数。
2.使用Windows消息来创建线程,在线程内做你想要的下载,而不影响主线程的语句执行。创建方法既可以是传统的windows消息,也可以通过Callback来创建自定义消息。 都是高级高手呀、一个一个直接上代码了 各位大大,小弟想弱弱的问一下,上面代码中
#Include <Timers.au3>
_Timer_SetTimer($hWnd [, $iElapse = 250 [, $sTimerFunc = "" [, $iTimerID = -1]]])
$hWnd 为什么是0呢,有什么含义,还请指点一两,不胜感激! 很多系统函数都有等待的超时时间,超过以后就退去或执行别的,
那没自定义的函数能实现这个功能吗? 这个东 ...
sdc7 发表于 2011-8-4 23:23 http://www.autoitx.com/images/common/back.gif
其实说到本质的就是au3不支持多线程嘛
你想让自定义函数在那里等着,而脚本接着执行下面的。
只有勉强用多进程试下了,不过,最近用Coproc函数来创建多进程,如:_Coproc("MyFun", "Para")
其中MyFun函数在单独的一个au3文件当中,结果老是提示“变量没有申明”,而其实是在这个au3文件头中用Global申明的全局变量了。另外多进程也远比多线程当资源了,典型的比粒较就是用Fx和Chrome,当两者打开同样的链接100个(每个链接一个Tab),结果Chrome几乎卡到动不了,CPU已经100%了,而Fx开100个跟开10个Tab区别不大。原因就是Chrome每个Tab就是一个子进程,而Fx用多线程来开Tab 呵呵,回复好有意思。
楼主有两种思路。
1. 把单条语句的执行时间缩到十毫秒级,由TImer来判断是否退出 ...
republican 发表于 2011-8-5 18:58 http://www.autoitx.com/images/common/back.gif
Er......回复怎么个有意思法?
请教下,你说的方法二,如果我注册:GUIRegisterMsg($WM_TIMER, "DownloadFunc")
用系统消息来实现楼主说的下载任务,超时退出问题,可以解决吗?
页:
[1]
2