AIR 3 Native Extension 12 Try Develop Async Event in C

今回は非同期処理を使ってネイティブライブラリからステートイベントを発行します。

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

government,politics news,politics news,politics
 

タグ: , ,

コメント / トラックバック1件

  1. [...] 12 Try Develop Async Event in C   ネイティブスレッドを使った非同期処理+ステータスイベント 11 Try Develop ANE in C#   C#でANEを作る 10 Try AIR for iOS + ANE   iOSアプリ [...]