◆ [VBScript] 非同期処理(マルチスレッド)は実現可能か?
どーもボキです。

ここのまるっとコピペ。
1.複数のスクリプトを作成し一方のスクリプトから実行する
  一番一般的で簡単です。複数のファイルをまとめて扱う必要があります。
  2つ3つでは問題ありませんが、10個、20個ともなれば少々手間です。

2.1つのスクリプトから %TEMP% フォルダにスクリプトを別途作成して実行する
  1つのファイルなので完成したら扱いやすいですが、スクリプトを作るスクリプトを記述する必要があります。
  また、生成したスクリプトを削除するコードを書く必要がありますが、途中で停止された場合ごみが残ります。

3.1つのスクリプトを引数によって挙動を変えて実行する
  下のような感じで。1つのスクリプトで引数により実行する関数を変更します。これにより1と2の欠点を解消します。
以下のソースは、3に該当する。
けどこれって、自身のスクリプトを別WScriptプロセスで実行してるだけだから、
変数の共有化とかできないよね。まぁ非同期処理っちゃぁ非同期だけどもさ。
やっぱ、VBScriptでスレッド処理って無理なのかな?
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

[PR]
by yozda | 2010-03-03 23:55 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/10103309
トラックバックする(会員専用) [ヘルプ]
<< キュアパッション [苦言] いまさら優位性の調査 >>