通常我們使用電腦過程中會設置多長時間不操作,電腦就會滅屏、睡眠甚至是休眠。 如果電腦進入睡眠或者休眠模式,電腦運行的程序將不再執(zhí)行。 如果我們設計的桌面程序一直在執(zhí)行某種操作,比如持續(xù)的USB通信,操作人可能會離開很久,這個時候,我們不希望電腦進入睡眠或者休眠模式。 那么該如何實現(xiàn)這一功能呢?
系統(tǒng)中相關接口文件是提供了這一功能,即調用如下方法即可:
[DllImport("kernel32")]
private static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);
[Flags]
private enum ExecutionState : uint
{
SystemRequired = 0x01,
DisplayRequired = 0x02,
[Obsolete("This value is not supported.")]
UserPresent = 0x04,
AwayModeRequired = 0x40,
Continues = 0x80000000,
}
如上所示,只需要設置系統(tǒng)狀態(tài)即可,ExcutionState各個枚舉變量的含義為:SystemRequired,強行設置系統(tǒng)IDLE計時器,使得系統(tǒng)一直處于工作態(tài); DisplayRequired,通過重置顯示器IDLE計時器,使得顯示器一直處于顯示狀態(tài); Continues,系統(tǒng)狀態(tài)維持當前狀態(tài),直到下一次方法調用或者標志位改變。
系統(tǒng)狀態(tài)枚舉變量
具體調用方法如下:
// 設置此線程此時開始一直將處于運行狀態(tài),此時計算機不應該進入睡眠狀態(tài)。
// 此線程退出后,設置將失效。
// 如果需要恢復,請調用 <"RestoreForCurrentThread"/> 方法。
//
// 表示是否應該同時保持屏幕不關閉。
// 對于游戲、視頻和演示相關的任務需要保持屏幕不關閉;而對于后臺服務、下載和監(jiān)控等任務則不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}
//恢復此線程的運行狀態(tài),操作系統(tǒng)現(xiàn)在可以正常進入睡眠狀態(tài)和關閉屏幕。
public static void RestoreForCurrentThread()
{
SetThreadExecutionState(ExecutionState.Continues);
}
// 重置系統(tǒng)睡眠或者關閉屏幕的計時器,這樣系統(tǒng)睡眠或者屏幕能夠繼續(xù)持續(xù)工作設定的超時時間。
//
// 表示是否應該同時保持屏幕不關閉。
// 對于游戲、視頻和演示相關的任務需要保持屏幕不關閉;而對于后臺服務、下載和監(jiān)控等任務則不需要。
public static void ResetIdle(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}
因此,只要調用ResetIdle(true)就可以實現(xiàn)屏幕常亮并且系統(tǒng)運行正常。 如果要取消只要調用RestoreForCurrentThread()即可。
-
顯示器
+關注
關注
21文章
5065瀏覽量
141392 -
usb
+關注
關注
60文章
8147瀏覽量
270983 -
電腦
+關注
關注
16文章
1769瀏覽量
69926 -
計時器
+關注
關注
1文章
428瀏覽量
33494 -
睡眠
+關注
關注
0文章
14瀏覽量
8129
發(fā)布評論請先 登錄
CY8C4045AZI-S413使用外部時鐘 (48MHz) 而不是內部時鐘時可以進入睡眠模式嗎?
STM32F103進入睡眠模式或者待機模式或者停機模式,IO腳原先設置的電平值是否會改變?
使用wifi_set_sleep_type設置為light sleep后無法進入休眠怎么解決?
WICED 6.0如何進入睡眠模式?
請問SIM800A進入睡眠模式后進行喚醒有外部引腳進行電平變換進行指示嗎?
STM32F429進入睡眠的方式
筆記本電腦win10連接電源時無法進入睡眠的原因
進入睡眠模式(Sleep)的條件有哪些
低溫環(huán)境CH578M進入睡眠之后立刻死掉怎么解決?
如和讓STM8S與STM8L安全地進入睡眠狀態(tài)呢?
程序進入睡眠模式設置了定時器中斷為什么不能喚醒睡眠?
筆記本電腦合上蓋子不進入休眠模式的問題應該如何解決

32 系統(tǒng)進入stop模式_如何讓MCU進入睡眠狀態(tài)節(jié)省能耗?

APM32F103XC_TMR_關閉DMA進入睡眠模式出現(xiàn)故障

如何讓MCU進入睡眠狀態(tài)節(jié)省能耗?

評論