RiCHandleCloser 類別

OSAL 介面包含 RiCOSTask_endMyTask 方法,在執行緒自己將自己刪除時(例如,作用中回應類別進入終止連接器時),可以使用此方法。

但在部分 RTOSes 中,不容許執行緒直接執行此類作業。 RiCHandleCloser 類別可解決此問題。 該類別是作用中回應單態類別,且具有包含一個狀態的狀態圖。 此狀態僅會接收一個事件 (CloseEVent ),且在接收該事件時,僅會執行一個動作 (doCloseHandle() call)。

OMHandleClose 執行緒在 OMOS::initEpilog() 中起始設定:

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

如果某個執行緒將要結束,則該執行緒會呼叫(從架構)endMyTask() 函數,以將 CloseEvent message(event) 傳送至 HandleCloser 執行緒。

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

此訊息包含已刪除之執行緒的控點。

doCloseHandle 是靜態函數,在處理 CloseEvent 事件時,由 HandleCloser 執行緒進行呼叫。

您可以在「完整性」配接器 (Share/LangC/oxf/RiCOSIntegrity.c file) 中,查看 HandleCloser 用法。

註: 在 C++ 架構中,實作有類似機制。

意見回饋