2009-07-22 26 views
3

我有Windows Media编码器附带的脚本的变体。我通过WSH启动它,并将它设置为STDIN,STDOUT和STDERR。有没有办法在VBS中执行非阻塞IO或以某种方式向COM事件发出信号?

该脚本开始编码并最终在DO循环中等待,检查编码对象的状态,以便脚本知道如果编码停止时退出。 (内部循环仅打印一段时间,并休眠约2秒)。

要干净地退出,我想指示脚本停止编码,这将允许它从循环中删除并清理。

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

我想通过STDIN发送一个字符退出,但问题在于WScript.stdin块的所有方法。 是否有任何非阻塞的方式来从标准输入读取或某种方式来检查字符?

是否有可能在VBS中做一个线程?据我所知,你只能推销其他程序。

+0

我认为当你开始谈论线程和异步I/O时,你已经过去了VBSCRIPT。 – 2009-07-23 12:15:36

+0

同意。我可能在未来的版本中简单地将COM移到C++端。 – 2009-07-23 15:05:01

回答

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 “为了指导剧本。

它的丑陋,但它的作品。

相关问题