我正在使用的VBScript使用另一个对象。
有时候Object会卡住。我的VBScript代码将挂在该行上,直到它“完成”。当它超时时,我想在VBScript关闭之前将.Close命令发送到Object。
如何判断我的VBScript何时超时?
我知道我可以把WScript.Timeout = 60
也许像..
WScript.Timeout = 5
do while true
loop
sub WScript_timeout()
msgbox("OK")
end sub
答案 0 :(得分:1)
通过设置Timeout
属性,指示解释器在计时器到期时自动终止脚本。这与使用选项//T:xx
运行解释器相同,并且无法在脚本中捕获/处理。你想要的是异步运行代码的能力,而VBScript并不真正支持它。
答案 1 :(得分:0)
真正的答案(对“我怎么确定我的 VBScript 何时超时?”这个问题)是你不能。与几乎所有脚本一样,如果VBScript停止运行(因为已超时),则正在运行的线程会终止运行,因此无法报告其状态。
但是有解决方案。但是,这需要一些技巧。
如果您运行的是批处理脚本,则无论您在何处使用该脚本来启动 new 批处理脚本(例如 batch_1.bat 都包括此内容)行: CALL batch_2.bat ),将运行第二个脚本,但是第一个脚本将等待。
第一个脚本的处理开始,等待(在CALL上),直到脚本2停止运行:这时,控制权返回到脚本1,该脚本继续执行CALL之后的任何代码,这些代码可用于报告脚本2已经结束的事实-
CALL batch_2.bat
ECHO The batch_2.bat script has stopped running && cmd /k
有多种方法可以启动batch_2.bat 而无需,从而使batch_1.bat暂停直到第二个脚本完成,但是在这里并不重要。
理论上,批处理脚本不支持并行处理。 VBScript当然也不是。但是前面的技术展示了一种方法,通过这种方法可以在批处理脚本中以某种方式实现并行处理,这使得它在vbScript上成为 up !
。
如果脚本挂起,可以确定vbScript超时的一种方法,因此脚本必须 成功完成或失败(这样就永远不会遗忘了冻结的脚本,因为它“挂起”了),就是在.vbs文件中使用 WScript 函数,并将 Windows脚本宿主设置设置为在(例如)之后超时30秒-
A 。打开“ Windows脚本主机设置”对话框:
B 。设置超时,使其在WSH运行时发生:
选择选项:“指定后停止脚本 秒数”。
在“秒”框中,键入时间限制为 应用于所有脚本(默认为10秒)。
。
这是一个查找和显示当前 WSH / WScript超时设置是什么的功能(如果显示尚未设置,请进行设置)-
WScript.Echo("WSH timeout: " + WScript.Timeout);
。
不能使用选项//T:xx
,因为它是 CScript 函数,在WScript中不起作用,因此不能在.vbs vbScript文件中使用。
。