我有一个Windows Media Encoder附带的脚本变体。我通过WSH启动它并将管道设置为STDIN,STDOUT和STDERR。
脚本开始编码并最终在DO循环中等待检查编码对象的状态,以便脚本知道在编码停止时退出。 (内部循环只打印一段时间,并且睡眠约2秒)。
为了彻底退出,我想发信号通知脚本停止编码,这将允许它从循环中删除并清理。
我没有(或者一定想)在我们的应用程序中实现了一个COM对象,它启动了脚本 - 否则,我只是触发一个事件。 (我会重新考虑这是否比我想在C ++中更容易)
我想过只是通过STDIN发送一个字符来退出,但问题是WScript.stdin的所有方法都阻塞了。 是否有任何非阻塞方式从stdin读取或以某种方式检查字符?
可以在VBS中执行一个线程吗?据我所知,你只能采取其他程序。
答案 0 :(得分:2)
VBS是单线程的,没有可以在WScript对象中使用的非阻塞调用。
用于异步发送循环信号的经典VBS kludge是使用文件系统对象。您的调用进程和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”的文件,以指示脚本。
它丑陋但它有效。