-
Notifications
You must be signed in to change notification settings - Fork 0
ThreadProxy
uupaa edited this page Apr 26, 2016
·
10 revisions
ThreadProxy は WebWorker 上で動作するように設計されたクラスです。
- new ThreadProxy インスタンスを作成します
- event.postback メッセージをポストバックします。
- ThreadProxy#post メインスレッドにメッセージを送信します
- ThreadProxy#close ワーカースレッドを終了します
new ThreadProxy(...) は、ThreadProxy のインスタンスを返します。ThreadProxy クラスは WebWorkers で使用します。メインスレッドの中では使用できません。
function ThreadProxy(postMessageHandler, // @arg Function - post message handler. postMessageHandler(args:Any, event:Event):void
closeRequestHandler) { // @arg Function - close request handler. closeRequestHandler(yes:Function, no:Function):void
}
- postMessageHandler にはコールバックされる関数 function(args:Any, event:Event):void を指定します
- この関数は Thread#post から呼ばれます
- args には Thread#post から渡された args がそのまま格納されています
- closeRequestHandler にはコールバックされる関数 function(yes:Function, no:Function):void を指定します
- この関数は Thread#close から呼ばれます
- 速やかに終了処理を行い yes() を実行すると、ワーカースレッドを安全に終了することができます
- 即座に終了できない場合は no() を実行すると、終了要求を拒否できます。
- 非同期処理を実行中などで終了できない場合は no() を実行し、安全に終了可能になったタイミングで ThreadProxy#close を実行し、自分自身を終了させてください
- Thread#close で指定された timeout 時間を過ぎても yes() や no() が実行されない場合は、ワーカースレッドは強制終了されられます
var thread = new ThreadProxy(function postMessageHandler(args, event) {
}, function closeRequestHandler(yes, no) {
yes();
});
ThreadProxy#post(...) は、メインスレッドにメッセージを送信します。
function ThreadProxy_post(args, // @arg Any = null
transfer) { // @arg TransferableObjectArray = null - [ArrayBuffer, CanvasPorxy, MessagePort, ...]
}
- args には Structured cloneがサポートしている型の一覧 にある任意の値を指定できます
- transfer の要素に ArrayBuffer を指定すると、ArrayBuffer の所有権をワーカースレッドに譲渡することで、ゼロコピーを実現できます。Transferable を参照してください
ThreadProxy#close():void を行うとワーカースレッドを終了させる事ができます。
- ワーカースレッド自身を終了させ、メインスレッドの closeMessageHandler(exitCode) コールバックします
- exitCode は Thread.EXIT_OK になります
Close Thread by WorkerThread を参照してください。