|
'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スクリプトとして実行されます。
|