My favorites | Sign in
Project Home Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Project Information
Members

'hta-webworkers' は HTML アプリケーション (HTA) でマルチスレッド処理を実現する JavaScript ライブラリです。

HTML5 の Web Workers と同じ動作を HTA 上で実現します。

サポートしている機能

呼び出し側 ( Web Workers の外)

  • new Worker('script_file_path')
  • Worker.onmessage
  • Worker.postMessage(value)

呼び出される側 (Web Workers の中)

  • (WorkerGlobalScope.) onmessage
  • (WorkerGlobalScope.) postMessage()

WebWorkersの中のスクリプトはWSHスクリプトとして実行されます。 ただし、標準入出力を使うと誤動作します つまり WScript.StdOut, WScript.StdIn, WScript.StdErr, WScript.Echo() を使ってはいけません。

使用例

hello-workers.hta と hello-workers.js が一番簡単なサンプルとなっている。

本体(.hta)

json2.js と htaworkers.js を読み込んでおく。

<script type="text/javascript" src="json2.js"></script>
<script type="text/javascript" src="htaworkers.js"></script>
  • Workerクラスのコンストラクタにサブスレッドで実行したい.jsファイルのパスを設定する。
  • Worker.onmessage にサブスレッドから応答が帰ってきたときの処理を記述する。
    • event.data がサブスレッド側でpostMessage()したオブジェクトとなる。
  • 最後に、Worker.postMessage() でサブスレッド処理を開始する。
  • function run() {
      var worker = new Worker("hello-workers.js");
      worker.onmessage = function(event) {
        alert("result(10 * 2): " + event.data);
      }
      worker.postMessage(10);
    }

サブスレッド側(.js)

グローバル変数onmessageにサブスレッドで実行したい関数を定義し、 最後に、メインスレッドに返したい値をpostMessageする。

hello-workers.js :

onmessage = function(event) {
  var result = event.data * 2; // logic
  WScript.Sleep(5 * 1000); // heavy process!
  postMessage(result); // return value
}

WebWorkers の中のスクリプトはWSHスクリプトとして実行されます。

Powered by Google Project Hosting