gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:20:35 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com