RiCHandleCloser 类

OSAL 接口包含 RiCOSTask_endMyTask 方法,如果线程被自身删除(例如,如果活动的反应类进入终止连接符),那么将使用此方法。

但是,在某些 RTOS 中,不允许线程直接执行此类操作。RiCHandleCloser 类能够解决此问题。它是具有状态图的活动反应单实例类,并且该状态图只包含一种状态。此状态只接收一个事件 (CloseEVent),并且接收到该事件时只执行一项操作(doCloseHandle() 调用)。

OMHandleClose 线程在 OMOS::initEpilog() 中进行初始化:

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

如果某个线程即将退出,那么它将从框架中调用 endMyTask() 函数,该函数将向 HandleCloser 线程发送 CloseEvent message(event)

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

此消息包含所要删除的线程的句柄。

doCloseHandle 是静态函数,处理 CloseEvent 事件时,HandleCloser 线程将调用此函数。

您可以在 Integrity 适配器(Share/LangC/oxf/RiCOSIntegrity.c 文件)中找到 HandleCloser 的用法。

注: 在 C++ 框架中,实现了类似的机制。

反馈