高级用法

使用超时尽可能减少唤醒租约的获取

假设您有一个驱动程序 X,它会接收可唤醒系统的中断。驱动程序对中断进行一些处理,并将事件传递给驱动程序 Y。我们实际上只希望在有实际唤醒系统的中断到达时,或者在 Driver X 观察到系统在上次收到中断后的超时期限内开始暂停时,Driver X 获得唤醒租约。

使用协议互锁时,此策略不适用,因为该策略可保证驱动程序 Y 已处理事件。

如需了解如何观察系统暂停转换,请参阅对暂停或恢复执行操作。如果驱动程序 X 在观察到挂起之后、观察到恢复之前收到中断,则应调用 ActivityGovernor.AcquireWakeLease。然后,驱动程序 X 可以确认中断、安排丢弃唤醒租约的时间,并将事件传递给驱动程序 Y。

驱动程序 X 必须记录上次收到中断的时间。当驱动程序 X 观察到系统挂起时,必须查看当前时间是否小于上次中断到达时间加上超时时间;如果是,则获取唤醒租约并保持该租约,直到上次收到的中断超时。

在这里,使用超时作为解决方案具有挑战性,因为我们必须猜测 Driver Y 接收事件并进行处理所需的时间。实际上,要确定合适的超时值更难,因为我们通常不仅要考虑驱动程序 Y 中的时间,还要考虑组件 1、组件 2 等。另一个挑战是选择适用于驱动程序 X 在其上运行的所有系统配置的超时值。