12.26.2012

JScript: Run External Commands Asynchroniously

JScript: 外部コマンドを並列実行する

コマンド(文字列)の配列をパラメータに取り、指定されたコマンドを並列実行し、
各コマンドのリターンコードを配列として返す関数。

コマンドが見つからない場合は –1 を返す。

var executeAsyncCommands = function(commands) {
  var n = commands.length;
  var processes = new Array(n);
  var returns = new Array(n);
  var success = new Array(n);
  var shell = new ActiveXObject("WScript.Shell");

  for (var i = 0; i < n; ++i) {
    try {
      processes[i] = shell.Exec(commands[i]);
      success[i] = true;
    }
    catch(e) {
      success[i] = false;
    }
  }

  L: while (true) {
    WScript.Sleep(100);
    for (i = 0; i < n; ++i) {
      if (success[i] && processes[i].Status == 0) continue L;
    }
    break;
  }

  for (var i = 0; i < n; ++i) {
    returns[i] = success[i] ? processes[i].ExitCode : -1;
  }
  return returns;
};

0 件のコメント:

コメントを投稿