【问题标题】:Alternative for WScript.Sleep and window.timeout [duplicate]WScript.Sleep 和 window.timeout 的替代方案 [重复]
【发布时间】:2019-02-05 03:56:24
【问题描述】:

我正在为在不支持WScript 的工业控制器上运行的应用程序编写 VBScript。控制器有一个用于处理 VBScript 的线程,我需要暂停我的脚本只进行几次程序扫描,以允许另一个事件处理程序进行处理。 VBScript 在 WSH 外壳中处理。如果我运行MsgBox 并弹出一条消息,它会释放脚本以执行所需的操作,并且一切正常,但我无法弹出消息框。

我读过的所有内容都建议使用WScript.Sleep,但我无法使用。

这不在网络浏览器中运行,因此 window.timeout 对象不可用。 我无法访问 WScript.Sleep,所以这不是一个选项。

【问题讨论】:

  • 你能不能把你的代码替换成由计时器(setInterval)触发的代码,我认为它包含一个永无止境的循环?
  • 这不是一个永无止境的循环。我有一个在控制器之间移动文件的 activex 对象。我调用它的一种方法来移动文件。它返回 true 或 false 表示它已完成。同时它制定了一个字符串消息,它通过事件处理程序发回。一旦我运行这个方法,下一行代码需要等到这个字符串被填充,但是如果我使用一个循环来监视那个字符串的长度,它会阻止事件处理程序的处理。我发现如果我弹出一个消息框,它将允许它运行,这样当我关闭该框时,我的代码就会正确执行。
  • 执行脚本的环境是什么?浏览器、Windows 脚本主机或其他东西?如有其他,请为软件命名。
  • 如果你检查运行你的脚本的环境的API,你可能会发现它提供了一些相当于sleep()或doEvents()的函数
  • 软件为 Indusoft,应用程序在 Windows 7 Embedded pro 上运行。该软件在 WSH 外壳中运行 vbscript,但它们不提供对 WScript 的访问。

标签: vbscript


【解决方案1】:

如果秒的粒度对您来说足够精细,并且您的操作系统是 Windows Vista 或更高版本,您可以将此脚本作为如何等待三秒的示例:

MsgBox (Now()), , "1"
WScript.CreateObject("WSCript.shell").Run "timeout.exe /T 3", 0, True
MsgBox (Now()), , "2"

【讨论】:

  • 请参阅stackoverflow.com/a/7783094/603855 了解使用 ping 的替代方法。
  • 我无法使用 WScript.shell,因为我的应用程序无权访问它。我真的需要在几毫秒而不是几秒内完成。
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 2018-11-14
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2015-05-30
相关资源
最近更新 更多