vbscript - 有没有一种方法可以在 VBS 中执行非阻塞 IO,或者有一种方法可以在没有 COM 事件的情况下发出信号?

标签 vbscript

我有 Windows Media Encoder 附带的脚本变体。我通过 WSH 启动它并设置到它的 STDIN、STDOUT 和 STDERR 的管道。

脚本开始编码并最终在 DO 循环中等待检查​​编码对象的状态,以便脚本知道如果编码停止则退出。 (在内部循环只打印一个句点,然后休眠大约 2 秒)。

为了彻底退出,我想向脚本发出停止编码的信号,这将允许它从循环中退出并进行清理。

我没有(或不一定想要)在启动脚本的应用程序中实现 COM 对象 - 否则,我只会触发一个事件。 (我会重新考虑这是否比我认为在 C++ 中更容易)

我想通过 STDIN 向它发送一个字符以退出,但问题是 WScript.stdin 的所有方法都被阻塞了。 是否有任何非阻塞方式从 stdin 读取或某种方式来检查字符?

是否可以在VBS中做一个线程?据我所知,您只能启动其他进程。

最佳答案

VBS 是单线程的,没有可以在 WScript 对象中使用的非阻塞调用。

异步发出循环信号的经典 VBS 方法是使用文件系统对象。您的调用进程和 VBScript 需要就受监视的文件夹位置达成一致(现在我们称之为 c:\temp)。

在初始化期间,您的脚本会:-

 Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

在循环中你的代码做:-

 If fso.FileExists("c:\temp\signal.dat") Then
     fso.DeleteFile "c:\temp\signal.dat" 
     '' // Tidy up and exit loop
 End If

您调用进程只需创建一个名为“c:\temp\signal.dat”的文件来指示脚本。

它很丑,但它有效。

关于vbscript - 有没有一种方法可以在 VBS 中执行非阻塞 IO,或者有一种方法可以在没有 COM 事件的情况下发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168733/

相关文章:

vbscript - 有人可以解释一下我的 VBScript 错误吗

windows - VbScript,无需用户输入即可远程安装 exe?

vbscript - 无法在VBScript中捕获8004020f错误

excel - 如何在VB脚本中设置延迟让Excel更新数据

vbscript - 比较两个不同文件夹中的两个文件并将其替换为较新的文件

vbscript - 是否可以在 UFT 上以编程方式禁用 "Display hidden-mode notification tooltip"?

vbscript - 关于 WMI Win32_WindowsProductActivation 类和 SetProductKey 方法的问题

用于驱动器映射的 VBA SharePoint 身份验证

VBScript 遍历子文件夹的设置级别

vbscript - 如何获取当前选定文件的路径