OSEventTaskWait()
2017-03-24 23:31
169 查看
程序清单 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()
- 使一个任务进入等待某事件发生状态, OSEventTaskWait()
- 初始化一个事件控制块,OSEventWaitListInit()
- 初始化一个事件控制块,OSEventWaitListInit()
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute
- 【Linux设备驱动程序(第三版)】----延迟:超时(wait_event_interruptible_timeout)
- setevent/waitforsingleobject
- Linux内核:通过wait_event和wake_up内在机制分析等待队列
- RAW-OS之任务0执行时钟节拍event的过程
- .Net Task<T>的一种比较神奇的卡死情况(Wait/Result卡死, await能得到结果)
- V$SYSTEM_EVENT、V$SESSION_EVENT、V$SESSION_WAIT&V$session、V$WAITSTAT
- Linux内核:通过wait_event和wake_up内在机制分析等待队列
- 锁类型_ sys.dm_os_wait_stats
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute
- _wait_event 具体实现过程
- wait_event_interruptible与wake_up配套使用
- Linux内核:通过wait_event和wake_up内在机制分析等待队列
- Thread.Sleep(1000) 、Task.Delay(1000).Wait() 区别
- wait_event_interruptible() 和 wake_up()的使用
- OS_TASK.C