今回は非同期処理を使ってネイティブライブラリからステートイベントを発行します。
1. 非同期版GetHelloWorld関数実装
GetHelloWorldはスレッドを実行して1を返すようにします。
スレッドは、_beginthreadを使います。
contextは、スレッド内で必要なのでグローバル変数に保持します。
また、起動したスレッドの処理(work_thread)では、1秒待機して
イベントを発行しています。
Native ExtensionのAPIは、ここを参照してください。
FREContext context;
void __cdecl work_thread(void* param) {
_sleep(1000);
const uint8_t* msg1 = (const uint8_t*)"Hello World";
const uint8_t* msg2 = (const uint8_t*)"Message";
FREDispatchStatusEventAsync(context,msg1,msg2);
context = NULL;
}
FREObject GetHelloWorld(FREContext ctx, void*
funcData, uint32_t argc, FREObject argv[]
)
{
context = ctx;
_beginthread(work_thread, 0, NULL);
FREObject retObj;
FRENewObjectFromInt32(1, &retObj);
return retObj;
}
2. コンテキストのステートイベントをハンドルします。
StatusEvent.STAUSをハンドリングします。
public function HelloWorldExtension()
{
context = ExtensionContext.createExtensionContext("nativeExtension", "type");
context.addEventListener(StatusEvent.STATUS,eventHandler);
}
protected function eventHandler(event:Event):void{
trace(event);
dispatchEvent( event );
}
今回は、Windows版のCでスレッドを起動させて非同期処理を行いステータスイベントを発行してみました。
Native Extensionを使うと非同期処理も扱えます。
参考資料
マルチスレッド
Visual C++ .NET または Visual C++ 2005 でスレッドを作成する方法
MSDN _beginthread、_beginthreadex
[...] 12 Try Develop Async Event in C ネイティブスレッドを使った非同期処理+ステータスイベント 11 Try Develop ANE in C# C#でANEを作る 10 Try AIR for iOS + ANE iOSアプリ [...]