然后VBScript onTimeout函数

时间:2013-04-20 01:45:24

标签: vbscript timeout

我正在使用的VBScript使用另一个对象。

有时候Object会卡住。我的VBScript代码将挂在该行上,直到它“完成”。当它超时时,我想在VBScript关闭之前将.Close命令发送到Object。

如何判断我的VBScript何时超时?

我知道我可以把WScript.Timeout = 60

也许像..

WScript.Timeout = 5
do while true

loop

sub WScript_timeout()
    msgbox("OK")
end sub

2 个答案:

答案 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脚本主机设置”对话框:

  1. 转到:开始>运行
  2. 在“打开”框中,键入:WSCRIPT
  3. 单击“确定”。

B 。设置超时,使其在WSH运行时发生:

  1. 选择选项:“指定后停止脚本 秒数”。

  2. 在“秒”框中,键入时间限制为 应用于所有脚本(默认为10秒)。

这是一个查找和显示当前 WSH / WScript超时设置是什么的功能(如果显示尚未设置,请进行设置)-

WScript.Echo("WSH timeout: " + WScript.Timeout);

不能使用选项//T:xx,因为它是 CScript 函数,在WScript中不起作用,因此不能在.vbs vbScript文件中使用。