liu liming(deleted)
06/13/2009 11:18 PM
post31697
|
もう解析した。
実には、QNX上でkdPostThreadEventは実現していないです。
1.代わりに、QNX上の拡張関数kdPostWindowEventQNXを使います
2.受信側のスレッドでは、kdWindowを作成しなければならない
> 皆さん
>
> 私はOpenKodeでマルチスレッドのプログラムを作っています。OpenKode1.0.2の通り
> 、二つスレッド間にOpenKodeイベント送受信のソースを作りましたが、なかなか動かな
> かったです。
>
> 1).kdWaitEvent(-1)を実施すると , err code : KD_EAGAIN (5):
> OpenKode1.0.2でのエラーメッセージは:The timeout expired while the event queue
> was empty.
>
> 2).kdPostThreadEvent()を実施すると、err code : KD_EAGAIN (5):
> In OpenKode1.0.2でのエラーメッセージは:Resource unavailable, try again.
>
> 上記エラーの原因はイベントキューの初期化の問題だと思いあすが、OpenKode1.0.2
> で初r期関数をなかなか見つかれませんでした。
>
> だれか手伝っていただけませんか。
>
>
> 私のソースコード
> ------------------------------------------------------------------------------
> ---------------
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/keycodes.h>
> #include <time.h>
> #include <EGL/egl.h>
> #include <KD/kd.h>
> #include <GLES/gl.h>
>
> KDThread * pRecvThread = KD_NULL;
>
> void * kdSendThreadFun(void * arg)
> {
> printf("SubThreadFunc: Enter\n");
>
> KDEvent * pSendEvent = KD_NULL;
>
> KDint looCnt = 0;
> while(looCnt < 1)
> {
> pSendEvent = kdCreateEvent();
>
> if(KD_NULL == pSendEvent)
> {
> printf("SubThreadFunc: Failed to create KdEvent, and the errCode is:%d\n",
> kdGetError());
> }
> else
> {
> printf("SubThreadFunc: Successed to create KdEvent\n");
>
> if(-1 == kdPostThreadEvent(pSendEvent, pRecvThread))
> {
> printf("SubTheadFunc: Failed to send KdEvent, and the errCode is:%d\n",
> kdGetError());
> }
> else
> {
> printf("SubTheadFunc: Successed to send KdEvent\n");
> }
> }
> //sleep(5);
> looCnt++;
> }
>
> return KD_NULL;
> }
>
>
> KDint kdMain(KDint argc, const KDchar *const *argv)
> {
> KDThread * pSendThread = KD_NULL;
> const KDEvent * pRecvEvent = KD_NULL;
>
> KDust recvTimeout = -1;
>
> pRecvThread = kdThreadSelf();
>
> pSendThread = kdThreadCreate(KD_NULL, &kdSendThreadFun, KD_NULL);
>
> if(KD_NULL == pSendThread)
> {
> printf("MainThread: Failed to create sub thread, and errCode is:%d\n",
> kdGetError());
> }
> else
> {
> printf("MainThread: Successed to create sub thread\n");
> }
>
> while ((pRecvEvent = kdWaitEvent(recvTimeout)) != 0)
> {
> printf("MainThread: Successed to recv KdEvent\n");
>
> kdDefaultEvent(pRecvEvent);
> }
>
> printf("MainThread: Failed To Receive Event,and the errCode is:%d\n",
> kdGetError());
>
> return 0;
> }
> ------------------------------------------------------------------------------
> ---------------
>
>
> 実施結果
> ------------------------------------------------------------------------------
> ---------------
> SubThreadFunc: Enter
> SubThreadFunc: Successed to create KdEvent
> MainThread: Successed to create sub thread
> SubTheadFunc: Failed to send KdEvent, and the errCode is:5
> MainThread: Failed To Receive Event,and the errCode is:5
> ------------------------------------------------------------------------------
> ---------------
|
|
|