-
Notifications
You must be signed in to change notification settings - Fork 0
Thread
uupaa edited this page Jun 10, 2015
·
32 revisions
Thread.js の API の一覧です。Examples も参照してください。
- Thread.js
- new Thread インスタンスを作成します
- Thread#post ワーカースレッドにメッセージを送信します
- Thread#close ワーカースレッドを終了します
- Thread#active ワーカースレッドがアクティブならtrueになります
new Thread(...) は Thread インスタンスを生成します。Thread クラスはメインスレッドで使用します。WebWorkers の中では使用できません。
function Thread(script, // @arg URLString - Workers script
postMessageHandler, // @arg Function = null - post message handler. postMessageHandler(args:AnyArray, event:Event):void
closeMessageHandler) { // @arg Function = null - close message handler. closeMessageHandler(exitCode:Integer):void
}- postMessageHandler には postMessageHandler(args:AnyArray, event:Event):void を引数にとるコールバック関数を指定します
- postMessageHandler は ThreadProxy#post から呼ばれます
- args には、ThreadProxy#post から渡された args がそのまま格納されています
- closeMessageHandler には closeMessageHandler(exitCode:Integer):void を引数にとるコールバック関数を指定します
- closeMessageHandler はワーカースレッドが終了したタイミングで呼ばれます
var thread = new Thread("worker.js", function postMessageHandler(args, event) {
console.log(args);
}, function closeMessageHandler(exitCode) {
if (exitCode !== Thread.EXIT_OK) {
alert("error: " + exitCode);
}
});
thread.post(["HELLO", "WORKER"]);Thread#post(...) は、ワーカースレッドにメッセージを送信します。
function Thread_post(args, // @arg AnyArray = null - arguments
transfer, // @arg TransferableObjectArray = null - [ArrayBuffer, CanvasPorxy, MessagePort, ...]
postbackMessageHandler) { // @arg Function = null - postback message handler. postbackMessageHandler(args:AnyArray, event:Event):void
}- args には Structured cloneがサポートしている型の一覧 にある任意の値を配列で指定可能です
- transfer の要素に ArrayBuffer を指定すると、ArrayBuffer の所有権をワーカースレッドに譲渡することで、ゼロコピーを実現できます。Transferable を参照してください
- postbackMessageHandler には postbackMessageHandler(args:AnyArray, event:Event):void を引数にとるコールバック関数を指定できます
- ポストバックがあった場合に postbackMessageHandler(args:AnyArray, event:Event):void の形でコールバックされます
<script src="lib/WebModule.js"></script>
<script src="lib/Thread.js"></script>
<script>
/// index.html
var thread = new Thread("worker.js", function postMessageHandler(args, event) {
console.log(args[0]); // "HELLO POST";
}, function closeMessageHandler(exitCode) {
//
});
thread.post(["Job1"]);
thread.post(["Job2"], null, function postbackMessageHandler(args, event) {
console.log(args[0]); // "HELLO POSTBACK";
});
</script>/// worker.js
importScript(./lib/WebModule.js");
importScript(./lib/ThreadProxy.js");
var proxy = new ThreadProxy(function postMessageHandler(args, event) {
switch (args[0]) {
case "Job1": proxy.post("HELLO POST"); break;
case "Job2": event.postback("HELLO POSTBACK");
}
}, function closeRequestHandler(yes, no) {
//
});Thread#close(timeout:Integer = 10000):void を行うとワーカースレッドを終了させる事ができます。
- Thread#close() を使用すると、ThreadProxy の closeRequestHandler(yes, no) が呼ばれます
- timeout にはワーカースレッドが終了するまでの待機時間をms単位で指定できます。1000を指定すると1秒間待機します
強制終了する例 や タイムアウトさせる例 を参照してください。
Thread#active:Boolean はワーカースレッドが終了していれば false を、終了していなければ true を返します。