Project Home
Project Home
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - OpenKode、イベントを受け取れない: (2 Items)
   
OpenKode、イベントを受け取れない  
皆さん

 私は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
---------------------------------------------------------------------------------------------
Re: OpenKode、イベントを受け取れない  
もう解析した。

実には、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
> ------------------------------------------------------------------------------
> ---------------