2008年9月22日星期一

unattended mode reference count

PowerPolicyNotify(PPN_UNATTENDEDMODE, TRUE);
PowerPolicyNotify(PPN_UNATTENDEDMODE, FALSE);
这一对函数的作用,相当于
EnterCriticalSection()
LeaveCriticalSection()
这样类似的成对使用的函数。
实际power manager维护着一个global的reference count,当call PowerPolicyNotify(PPN_UNATTENDEDMODE, TRUE)时,reference count++。
当PowerPolicyNotify(PPN_UNATTENDEDMODE, FALSE),reference count--。

如果万一我们call他们时没有对称,那么系统会怎样?

Power manager参考reference count,如果不等于0,那么他会调度决定进入unattended mode。但是并不是说reference count不等于零,power manager就会让系统永远处于unattended mode,而是会有等待一个超时,如果超时,那么系统还是会进入sleep。同时,这个reference count会在进入sleep后清零,也就是"以前所有的不对称都既往不咎"。

没有评论: