使一个任务进入等待某事件发生状态, OSEventTaskWait()
2017-03-24 19:15
302 查看
程序清单 L6.7是OSEventTaskWait()函数的源代码。当某个任务要等待一个事件的发生时,相应事件的OSSemPend(),OSMboxPend()或者OSQPend()函数会调用该函数将当前任务从就绪任务表中删除,并放到相应事件的事件控制块的等待任务表中。
在该函数中,首先将指向事件控制块的指针放到任务的任务控制块中 [L6.7(1)],接着将任务从就绪任务表中删除[L6.7(2)],并把该任务放到事件控制块的等待任务表中[L6.7(3)]。
程序清单 L6.7 使一个任务进入等待状态 |
void OSEventTaskWait (OS_EVENT *pevent) |
{ |
OSTCBCur->OSTCBEventPtr = pevent; (1) |
if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { (2) |
OSRdyGrp &= ~OSTCBCur->OSTCBBitY; |
} |
pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; (3) |
pevent->OSEventGrp |= OSTCBCur->OSTCBBitY; |
} |
相关文章推荐
- 使一个任务进入等待某事件发生状态, OSEventTaskWait()
- 初始化一个事件控制块,OSEventWaitListInit()
- 使一个任务进入就绪态,OSEventTaskRdy()
- 初始化一个事件控制块,OSEventWaitListInit()
- 使一个任务进入就绪态,OSEventTaskRdy()
- oracle wait event 等待事件
- JAVA--第12周实验--任务1--编写一个Panel的子类MyPanel,要求MyPanel的实例作为其按钮的ActionEvent事件的监视器
- OSEventTaskWait()
- WaitForSingleObject与WaitForMultipleObjects用法详解(好用,而且进入一个非常高效沉睡状态,只占用极少的CPU时间片)
- wait for stopper event to be increased 等待事件
- JAVA--第十二周任务之1.编写一个应用程序,要求编写一个Panel的子类MyPanel,MyPanel中有一个文本框和一个按钮,要求MyPanel的实例作为其按钮的ActionEvent事件的监视
- ASYNC_NETWORK_IO和PREEMPTIVE_OS_WAITFORSINGLEOBJECT等待事件
- Task用法(2)-任务等待wait
- Oracle9i中一个特殊等待事件--null event
- Sqlserver等待事件:动态性能视图:sys.dm_os_wait_stats
- FreeRTOS事件组之事件组等待位(xEventGroupWaitBits)
- [Oracle]OWI等待事件视图(v$session_wait/v$session_event/v$system_event)
- 用ACE的Reactor模式实现网络通讯时,ACE内部用WSAEventSelect函数把网络事件与一个事件对象关联起来,目的是为了后面用WaitForMultipleObjects函数统一处理。
- 由于等待超时而将任务置为就绪态, OSEventTO()
- 多个进程同时等待网络的连接事件,当这个事件发生时,这些进程被同时唤醒,我们知道进程被唤醒,需要进行内核重新调度,这样每个进程同时去响应这一个事件,而最终只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠或其他。