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 用法。