進階用法

使用逾時值盡量減少喚醒租約取得次數

假設您有 Driver X,可接收可喚醒系統的中斷。驅動程式會對中斷進行一些處理,並將事件傳遞至 Driver Y。我們只希望 Driver X 在收到實際喚醒系統的中斷或 Driver X 觀察到系統在收到上次中斷的逾時期間內開始暫停時,才取得喚醒租約。

使用Protocol Interlocks 時,這項策略就不適用,因為該策略可保證 Driver Y 會處理事件。

如要瞭解如何觀察系統暫停轉換,請參閱「對暫停或恢復採取行動」。如果 Driver X 在觀察到暫停後,在觀察到恢復之前收到中斷,則應呼叫 ActivityGovernor.AcquireWakeLease。接著,Driver X 可以確認中斷、排定釋出喚醒權杖的時間,並將事件傳遞給 Driver Y。

Driver X 必須記錄上次中斷的時間。當 Driver X 觀察到系統處於暫停狀態時,必須檢查目前時間是否小於上次中斷到達時間加上逾時時間,如果是的話,就取得喚醒租約並保留,直到上次收到中斷逾時時間為止。

使用超時做為解決方案的難度很高,因為我們必須猜測 Driver Y 接收事件並處理所需的時間。實際上,要找到合適的逾時值更為困難,因為我們必須考量的時間不僅是 Driver Y 中的時間,還有元件 1、元件 2 等等。另一個挑戰是,我們必須選擇在 Driver X 執行的所有系統設定中都適用的逾時值。