タグ
  Active Directory (51)
  ANSI (1)
  bash (1)
  BAT (14)
  bind (1)
  CentOS (3)
  CSharp (1)
  C言語 (4)
  DNS (3)
  Excel (1)
  Fedora (4)
  FreeBSD (3)
  iSCSI (1)
  Java (11)
  JavaScript (6)
  Link (4)
  Linux (15)
  Mail (1)
  Microsoft (4)
  NIS (1)
  OpenLDAP (2)
  OpenSolaris (4)
  PHP (2)
  PostgreSQL (2)
  PowerShell (33)
  RFC (3)
  Solaris (10)
  SQL Server (1)
  Ubuntu (3)
  VBScript (65)
  Visual Basic (1)
  VMware (2)
  Windows (14)
  WMI (16)
  WSF (5)
  WSH (10)
  作成中 (5)
  慣用句 (1)
  正規表現 (6)
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-2010 UPKEN