文章关键字 ‘多线程’

C语言标准库函数rand与多线程

2015年08月26日,星期三

今天在一个多线程程序中调用了C标准库函数rand,结果却发现每个线程生成的随机数都是一样的,甚至每次运行程序生成的随机数都是一样的。

(更多…)

VBS真的能实现多线程?

2013年04月30日,星期二

今天在批处理之家看到一个帖子《vbs多线程下载》,想起以前在VBS吧也看过《多线程下载文件》,当时我就质疑这到底是不是多线程,今天正好研究一下VBS是否真的能实现多线程。

(更多…)

VBS实现“多线程”

2010年09月30日,星期四

今天有人发邮件问我一个问题:

想请教一下VBS中INPUTBOX函数能否超时关闭?
如果可以的话,应该如何超时关闭输入框? 万分感谢

乍一看这是不可能实现的,因为InputBox函数本身没有超时关闭的参数,而且程序会一直等待InputBox返回才继续运行,后面的语句不可能在InputBox返回之前执行。

如果VBS能实现高级语言的多线程的话……只可惜VBS不可能实现多线程,但是可以用setTimeout方法模拟“多线程”。

Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "about:blank"
Set window = IE.Document.parentWindow
id = window.setTimeout(GetRef("on_timeout"),3000,"VBScript")
name = InputBox("Please enter your name","InputBox Timeout")
window.clearTimeout id
If name <> "" Then MsgBox "Hello," & name
IE.Quit

'By Demon
'https://demon.tw

Sub on_timeout()
    Dim WshShell
    set WshShell = CreateObject("wscript.Shell")
    WshShell.SendKeys "{ESC}"
End Sub

用setTimeout方法设定3秒超时,3秒后用SendKeys方法发送ESC键结束InputBox。当然,用SendKeys是很不靠谱的,我一般很少用SendKeys方法,因为它做了太多的假设,万一InputBox不是激活窗口呢?这里只是为了程序简单而用了SendKeys,可以换成结束脚本本身。

同理,想在VBS中实现VB中的Timer事件的话可以用setInterval方法,我就不写例子了,自己看文档。

参考链接:setTimeout Method (window, Window Constructor)