Пример #1
0
KDint KD_APIENTRY kdMain(KDint argc, const KDchar *const *argv)
{
    kdInstallCallback(&callback1, KD_EVENT_QUIT, (void *)1234);
    kdInstallCallback(&callback2, KD_EVENT_QUIT, (void *)1234);
    for(;;)
    {
        KDEvent *event = kdCreateEvent();
        event->type = KD_EVENT_QUIT;
        event->userptr = (void *)1234;
        kdPostEvent(event);
        kdPumpEvents();
        if(quit)
        {
            break;
        }
    }
    return 0;
}
Пример #2
0
KDvoid xmEx_Regular ( KDvoid )
{
	const KDEvent* wait;

	KDEvent*	event[4];	
	KDint		ret = 0;
	KDint		i   = 0;
	
	kdLogMessage ( "* Case Regular\n\n" );

	//
	// 설명 : 이벤트 생성
	// 반환 : 이벤트 
	//
	event[i] = kdCreateEvent ();
	kdAssert ( ( event[i] ) );

	event[i]->type = XM_FOR_PUMP_EVENT;	// 펌프 테스트 용
	kdLogMessagefKHR ( "kdCreateEvent      : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	i++;

	event[i] = kdCreateEvent ();	
	event[i]->type = XM_FOR_WAIT_EVENT;	// 메세지 대기 테스트 용
	kdLogMessagefKHR ( "kdCreateEvent      : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	i++;

	event[i] = kdCreateEvent ();
	event[i]->type = XM_FOR_PUMP_EVENT;	// 이벤트 제거 테스트 용
	kdLogMessagefKHR ( "kdCreateEvent      : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	i++;

	event[i] = kdCreateEvent ();	
	event[i]->type = XM_FOR_PUMP_EVENT;	// 메세지 대기시 펌프 테스트 용
	kdLogMessagefKHR ( "kdCreateEvent      : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );

	i = 0;
	//
	// 설명 : 이벤트 전달
	// 인자 : 이벤트
	// 반환 : 성공 = 0, 실패 = -1
	//
	ret = kdPostEvent ( event[i] );
	kdAssert ( !ret );

	kdLogMessagefKHR ( "kdPostEvent        : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	i++;

	//
	// 설명 : 이벤트 전달 ( 해당 쓰레드로 이벤트 전달 )
	// 인자 : 이벤트, 쓰레드 핸들 
	// 반환 : 성공 = 0, 실패 = -1
	//	
	ret = kdPostThreadEvent ( event[i], kdThreadSelf() );			// 현재 쓰레드 구현 안됨. 	
	kdAssert ( !ret );

	kdLogMessagefKHR ( "kdPostThreadEvent  : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	i++;

	// 
	// 설명 : 이벤트 제거 ( 이미 포스팅 또는 제거를 한 경우에는 예기치 않은 오류 발생 가능 )
	// 인자 : 이벤트
	//
	kdFreeEvent ( event[i] );

	kdLogMessagefKHR ( "kdFreeEvent        : event = 0x%08x", event[i] );
	i++;

	//
	// 설명 : 콜백 함수 등록 ( 이벤트 및 사용자 포인터를 이중으로 등록 가능 )
	// 인자 : 콜백 함수, 이벤트 종류, 사용자 포인터
	// 반환 : 성공 = 0, 실패 = -1
	//	
	ret = kdInstallCallback ( xmRegularCallback, XM_FOR_PUMP_EVENT, KD_NULL );	
	kdAssert ( !ret );

	kdLogMessagefKHR ( "kdInstallCallback  : func  = 0x%08x, type = %04d, userptr = 0x%08x", xmRegularCallback, XM_FOR_PUMP_EVENT, KD_NULL );

	//
	// 설명 : 이벤트 펌프( 등록된 콜백 함수 조건에 성립된 메세지들을 큐에서 꺼내 전부 콜백 함수를 호출한다 )
	// 반환 : 성공 = 0, 실패 = -1
	//
	kdLogMessagefKHR ( "kdPumpEvents       : pumping messages." );

	ret = kdPumpEvents ( );
	
	kdAssert ( !ret );

	//
	// 설명 : 메세지 대기
	// 인자 : 시간제한 ( -1은 무한 )
	// 반환 : 이벤트
	//		
	i = 3;
	kdPostEvent ( event[i] );
	kdLogMessagefKHR ( "kdPostEvent        : event = 0x%08x, type = %04d, userptr = 0x%08x", event[i], event[i]->type, event[i]->userptr );
	kdLogMessagefKHR ( "kdWaitEvent        : waiting message." );	
	
	wait = kdWaitEvent ( -1 );	
	kdAssert ( wait->type == XM_FOR_WAIT_EVENT );

	kdLogMessagefKHR ( "kdWaitEvent        : event = 0x%08x, type = %04d, userptr = 0x%08x", wait, wait->type, wait->userptr );

	//
	// 설명 : 디폴트 처리 ( 전달된 이벤트는 삭제 됨 )
	// 인자 : 이벤트
	// 
	kdDefaultEvent ( wait );	

	kdLogMessagefKHR ( "kdDefaultEvent     : event = 0x%08x", wait );
}