WSHで非同期割込処理。メッセージを出しながら時間の掛かる処理
WSHはシングルスレッドなので、本当の多重処理はできませんが、非同期割込による擬似的な多重処理はできます。
処理中メッセージを出して、時間の掛かる処理を実行する例
Set d=CreateObject("htmlfile")
d.parentWindow.setTimeout GetRef("proc"),100
MsgBox "時間の掛かる処理中です。。。というメッセージを出しっぱなしにして"
Sub proc
Set wShell=CreateObject("WScript.Shell")
wShell.PopUp "時間の掛かる処理のつもり。。。",5
WScript.Timeout=1
WScript.Sleep 2000
End Sub
割り込まれた本処理のほうは、割込処理が抜けるまで、実行されません。
ここでは、割込処理を抜けても、WScript.Quitしても、MsgBoxに応答するまで、本処理が終了しないので、WScript.Timeoutで、MsgBox諸共、終了させます。
WScript.Timeoutは、undocumentedです。起動オプションの//T:に対応します。
ScriptControlのTimeoutは、CPU timeですが、WScript.Timeoutは、elapsed timeです。
なので、MsgBoxやWScript.Sleepでもカウントされます。
WScript.Timeoutの最小値は1秒なので、WScript.Sleepで1秒以上待たせると、1秒で処理が打ち切られます。なので、終了まで1秒の遅延が発生します。:-p
« <hta:application singleinstance=yes /> の振舞い | トップページ | 「Web ページ、HTML のみ」で保存できないときは、デザインモードで回避する。 »