rt-thread的IPC机制之事件源码分析(四)

2014-11-24 07:52:34 · 作者: · 浏览: 2
才能运行到这:1 定时器超时,当前线程还是没有等到事件的到达,此时,定时器的超时回调处理函数内会将thread的error设置为-RT_ETIMOUT;2:事件到达,当前线程被唤醒,此时thread的error还是保持原值不变
{
/* return error */
return thread->error;//没有等到事件到达,则直接返回错误码
}
/* received an event, disable interrupt to protect */
level = rt_hw_interrupt_disable();//开中断,此时已等到事件的到来
/* set received event */
*recved = thread->event_set;//保存接收到的事件集到recved指向的内存
}
/* enable interrupt */
rt_hw_interrupt_enable(level);//开中断
RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(event->parent.parent)));
return thread->error;
}
接收线程比较简单,如果接收到事件则判断它是否为它关心的事件,如果是,则保存事件,如果不是,则当没有接收到事件情况一起处理。接下来就是没有事件到达的情况,还是老规矩,先判断时间参数是否为0,如果是则直接返回超时,如果不是,则设置一定时器然后启动它,接着重新调度线程,然后根据当前线程的error值是否为RT_EOK来判断是否有新的并且符合条件的事件到达,如果不是,则返回错误码,如果是,则保存事件,最终返回OK。