2009-07-22 31 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 「爲了指導劇本。

它的醜陋,但它的作品。

相關問題