2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« <hta:application singleinstance=yes /> の振舞い | トップページ | 「Web ページ、HTML のみ」で保存できないときは、デザインモードで回避する。 »

2007年9月28日 (金)

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 のみ」で保存できないときは、デザインモードで回避する。 »