2013年5月25日 星期六

[Win32] 休眠及睡眠(hibernate and suspend)

剛好用到幾個電源管理的APIs,先簡單介紹一下休眠及睡眠。
休眠和睡眠有什麼不同呢?

睡眠(suspend)會讓電腦處於一個低耗電量的模式,但當電源被用光時,
電腦還是會關機的,所以沒有被儲存的資料還是會遺失。

休眠(hibernate)則會將電腦當下的狀態存到硬碟裡,然後power off;
當喚醒時(resume),則會回存power off前狀態到記憶體裡(RAM)。
舉個例子,當你開啟了office word和excel,然後按下休眠,再喚醒時,依然會看到word和excel;
反之,如果是重開機,就看不到啦。

實作上會用到一個API,SetSuspendState
BOOLEAN WINAPI SetSuspendState(
_In_ BOOLEAN Hibernate,
_In_ BOOLEAN ForceCritical,
_In_ BOOLEAN DisableWakeEvent
);

Hibernate [in] : 如果是TRUE,系統將進入hibernates;反之則是suspended。
ForceCritical [in] : 如果是TRUE,系統則立刻suspend;
反之系統會先廣播一個PBT_APMQUERYSUSPEND事件給每一個應用程式,請求要suspend的權限。
DisableWakeEvent [in] : 如果是TRUE,系統將關掉所有wake event,反之wake events得是開啟的。

程式碼如下:
void suspend()
{
   //If the first parameter is TRUE, the system hibernates. 
  //If the parameter is FALSE, the system is suspended.
   SetSuspendState(FALSE, TRUE, FALSE); 
}

void hibernation()
{
   SetSuspendState(TRUE, TRUE, FALSE); 
}

沒有留言:

張貼留言