作成 2010.01.28
更新 2010.01.29
VBScript で関数やサブルーチンを非同期に実行する
WScript はマルチスレッドが実装されていないので、関数やサブルーチンを非同期に実行するには別のプロセスを作る必要があります。 しかしながら、別のプロセスを作るにはファイルを実行する必要があるため、以下の3通りの手段が考えられます。
  1. 複数のスクリプトを作成し一方のスクリプトから実行する
    一番一般的で簡単です。複数のファイルをまとめて扱う必要があります。2つ3つでは問題ありませんが、10個、20個ともなれば少々手間です。
  2. 1つのスクリプトから %TEMP% フォルダにスクリプトを別途作成して実行する
    1つのファイルなので完成したら扱いやすいですが、スクリプトを作るスクリプトを記述する必要があります。また、生成したスクリプトを削除するコードを書く必要がありますが、途中で停止された場合ごみが残ります。
  3. 1つのスクリプトを引数によって挙動を変えて実行する
    下のような感じで。1つのスクリプトで引数により実行する関数を変更します。これにより1と2の欠点を解消します。
Option Explicit
Dim ProcNumber, WshShell
Set WshShell = CreateObject("WScript.Shell")
If WScript.Arguments.Count = 0 Then
  ProcNumber = 0
Else
  ProcNumber = CInt(WScript.Arguments(0))
End If

Select Case ProcNumber
Case 0
  Call Proc0
Case 1
  Call Proc1
Case Else
  WScript.Echo "else"
End Select

WScript.Quit

Sub Proc0
  ' Proc1 を別プロセスで非同期に実行する
  ProcNumber = 1
  WshShell.Exec "wscript " & WScript.ScriptName & " " & ProcNumber
  WScript.Echo "Main"
End Sub
Sub Proc1
  WScript.Sleep 3000
  WScript.Echo "second"
End Sub
タグ: VBScript

©2004-2017 UPKEN IPv4