RiCHandleCloser 클래스

OSAL 인터페이스에는 스레드가 자신을 삭제한 경우(예: 활성 반응 클래스가 종료 커넥터로 진입한 경우) 사용되는 RiCOSTask_endMyTask 메소드가 포함되어 있습니다.

그러나 일부 RTOS에서 스레드가 이러한 오퍼레이션을 직접 수행하는 것은 금지됩니다. RiCHandleCloser 클래스는 이러한 문제를 해결합니다. RiCHandleCloser 클래스는 하나의 상태가 포함된 상태 차트가 있는 활성 반응 싱글톤 클래스입니다. 이 상태는 하나의 이벤트(CloseEVent)만 수신하고 이벤트를 수신하면 하나의 조치(doCloseHandle() call)만 수행합니다.

OMHandleClose 스레드는 OMOS::initEpilog()에서 다음과 같이 초기화됩니다.

void RiCOSOXFInitEpilog(void)
{
      
(void)RiCHandleCloser_startBehavior(RiCHandleCloser_Instance(RiCInt_doCloseH
andle));
}

일부 스레드가 종료되려고 하는 경우 해당 스레드는 HandleCloser 스레드로 CloseEvent 메시지(이벤트)를 전송하는 endMyTask() 함수를 프레임워크에서 호출합니다.

void RiCOSTask_endMyTask( RiC_CONST_TYPE void *const hThread )
{
    if( hThread != NULL )
    {
         RiCHandleCloser_genCloseEvent(hThread);
        Exit( 0UL );
    }
}

이 메시지에는 삭제된 스레드의 핸들이 포함되어 있습니다.

doCloseHandleCloseEvent 이벤트 처리 시 HandleCloser 스레드가 호출하는 정적 함수입니다.

무결성 어댑터(Share/LangC/oxf/RiCOSIntegrity.c 파일에서 HandleCloser 사용법을 확인할 수 있습니다.

참고: 유사한 메커니즘이 C++ 프레임워크에서 구현됩니다.

피드백