[已解决]-----自定义UDF时,如何实现实时状态反馈?
本帖最后由 kingfirekkk 于 2011-1-26 08:15 编辑小弟突发奇想,在自己写UDF时,一直有个难题不知道如何解释,描述如下:
1. UDF Funtion在执行的时候,如何根据反馈值,来判读进度?
2. 反馈值除了1,0,@error错误码以外,还有没有其它的技巧?
PS:个人的思路还集留在批处理阶段,程式执行完了,或者错误了以后,会有返回码...所写的程式仍然在进行错误码的判断...
最终想要解决的问题:
比如在测试网络通断的过程中,如何计算进度百分比?
代码举例如下:
if testlan() then
msgbox(0,"网络测试!","网络测试OK!")
else
msgbox(0,"网络测试!","网络测试失败!")
endif
func testlan();1=sucess; 0=Fail
if ping("www.baidu.com",250)>1 then
return 1
else
return 0
endif
endfunc
PS:这个主师的答案应该是没有比较好的方法解决这个问题了。"实时"是比较困难的! $times = _ping("www.baidu.com")
MsgBox(0, "网络测试", "错误代码:" & @error & @LF & "扩展代码:" & @extended & @LF & "通话时间:" & $times & @LF)
$times = _ping("www.b1aidu.com")
MsgBox(0, "网络测试", "错误代码:" & @error & @LF & "扩展代码:" & @extended & @LF & "通话时间:" & $times & @LF)
Func _ping($ip) ;成功 > 0 ; 失败 = 0
Local $ret = Ping($ip, 250)
Return SetError(@error, @error, $ret)
EndFunc ;==>_ping 回复 2# _ddqs.
非常感谢兄弟提供的代码,但感觉有点跑题啦.. 有没有人过来围观一下?给点思路也不错哦? $times = _ping("www.baidu.com")
$times = $times * 4
While $times > 100
$times = $times / 10
WEnd
ProgressOn("进度", "比例", "0 %")
ProgressSet($times, $times & " %")
Sleep(500)
ProgressSet(100, "完成", "Complete")
Sleep(500)
ProgressOff()
Func _ping($ip) ;成功 > 0 ; 失败 = 0
Local $ret = Ping($ip, 250)
Return SetError(@error, @error, $ret)
EndFunc ;==>_ping 感觉象网络测试这种事很难用进度去判断吧,就象fiefox取消网页载入进度显示一样,一般种情况下就显示一个循环的动态效果,象现在那个转圈的鼠标一样。 回复 5# _ddqs.
非常感谢兄弟的回复,可能我的问题没有描述清楚:
像Ping这个命令,它是会有返回值的,假如我不是Ping,而是复制文件或者其它的命令一类(仅举例):
filecc(@script&"\"aa.txt","c:\txt")
func filecc($source,$object)
_rundos("copy "&$sorce&" "&$object)
endfunc
怎么样制作UDF,能够实时返回当前的状态,比如说,已经百分之多少了....能反应当前的状态(如完成,失败,百分之多少,已经复制多少....此类的信息)..... 一些单线的任务过程哪有返回值
有返回值的是使用类功能的自定义函数进行操作!
如 COPY 你可使用网络下载文件的办法进行读取(如果可行)
即使用每次读取多少字节的数据流
这就有有 1个与基数比较的值
才会有进度存在
! 系统能够判断进度是否完成
但这其中的返回值或方法它不向用户开放
!
只能靠自己去克隆该方法
页:
[1]