通常我們使用電腦過程中會設置多長時間不操作,電腦就會滅屏、睡眠甚至是休眠。 如果電腦進入睡眠或者休眠模式,電腦運行的程序將不再執(zhí)行。 如果我們設計的桌面程序一直在執(zhí)行某種操作,比如持續(xù)的USB通信,操作人可能會離開很久,這個時候,我們不希望電腦進入睡眠或者休眠模式。 那么該如何實現這一功能呢?
系統中相關接口文件是提供了這一功能,即調用如下方法即可:
[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ài)即可,ExcutionState各個枚舉變量的含義為:SystemRequired,強行設置系統IDLE計時器,使得系統一直處于工作態(tài); DisplayRequired,通過重置顯示器IDLE計時器,使得顯示器一直處于顯示狀態(tài); Continues,系統狀態(tài)維持當前狀態(tài),直到下一次方法調用或者標志位改變。
系統狀態(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ài)和關閉屏幕。
public static void RestoreForCurrentThread()
{
SetThreadExecutionState(ExecutionState.Continues);
}
// 重置系統睡眠或者關閉屏幕的計時器,這樣系統睡眠或者屏幕能夠繼續(xù)持續(xù)工作設定的超時時間。
//
// 表示是否應該同時保持屏幕不關閉。
// 對于游戲、視頻和演示相關的任務需要保持屏幕不關閉;而對于后臺服務、下載和監(jiān)控等任務則不需要。
public static void ResetIdle(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}
因此,只要調用ResetIdle(true)就可以實現屏幕常亮并且系統運行正常。 如果要取消只要調用RestoreForCurrentThread()即可。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。
舉報投訴
-
顯示器
+關注
關注
22文章
5160瀏覽量
144812 -
usb
+關注
關注
60文章
8481瀏覽量
286102 -
電腦
+關注
關注
16文章
1817瀏覽量
72263 -
計時器
+關注
關注
1文章
435瀏覽量
35389 -
睡眠
+關注
關注
0文章
15瀏覽量
8239
發(fā)布評論請先 登錄
相關推薦
熱點推薦
CY8C4045AZI-S413使用外部時鐘 (48MHz) 而不是內部時鐘時可以進入睡眠模式嗎?
(48MHz),設備能否僅通過執(zhí)行 cysyspmSleep () API 進入睡眠模式?
或者,如果用戶使用外部時鐘,用戶是否需要進行其他處理?
當外部時鐘為 48MHz 時,您是否有睡眠模式下
發(fā)表于 02-26 06:36
STM32F103進入睡眠模式或者待機模式或者停機模式,IO腳原先設置的電平值是否會改變?
STM32F103進入睡眠模式或者待機模式或者停機模式,IO腳原先設置的電平值是否會改變?
鎖定STM32F103的IO腳,那么當 STM32F103進入睡眠模式
發(fā)表于 05-17 09:22
使用wifi_set_sleep_type設置為light sleep后無法進入休眠怎么解決?
使用wifi_set_sleep_type設置為light sleep后無法進入休眠,模塊電流一直在80mA左右,(用強制light sleep休眠可以到十幾mA)
手冊說調用wifi_set_sleep_type后“由系統底層
發(fā)表于 07-22 06:12
TJA1145為什么無法進入睡眠模式?
我正在使用 Example_SW_TJA1145 程序。當我使用示例程序的 ChangeToSleepOperation 函數進入 Sleep 模式時,我調試并發(fā)現發(fā)生了 PO 事件。每當我嘗試進入睡眠
發(fā)表于 04-24 08:03
WICED 6.0如何進入睡眠模式?
你好:問題一:在版本5之后,沒有“WiDeDeHalyLPM .h”文件,進入和退出原來的睡眠模式已經無法實現,現在6套睡眠模式的API是哪里?問題二:此外,將睡眠設置在“MyHyAp
發(fā)表于 12-11 14:54
請問SIM800A進入睡眠模式后進行喚醒有外部引腳進行電平變換進行指示嗎?
SIM800A進入睡眠模式后進行喚醒有沒有外部引腳進行電平變換進行指示???或者在睡眠模式中突然接收到了GPRS信號有沒有外部引腳進行電平變換指示?
發(fā)表于 06-12 04:35
STM32F429進入睡眠的方式
睡眠進入睡眠的方式很簡單:只需要調用WFI 或WFE 命令,在睡眠模式中,內核停止,但是所有外設,包括M4 核心的外設均處于工作狀態(tài)中。喚醒睡眠的方式:任一中斷;喚醒事件。// Wai
發(fā)表于 08-11 06:38
筆記本電腦win10連接電源時無法進入睡眠的原因
筆者的筆記本電腦(win10)一直有一個問題,就是當筆記本連接電源的時候,無法進入睡眠,苦思很久,一直沒找到答案。無論怎么設置電源選項,合蓋子、按電源鍵都沒有睡眠的效果,電腦只是黑屏,
發(fā)表于 12-27 06:01
進入睡眠模式(Sleep)的條件有哪些
進入睡眠模式(Sleep)的條件:通過將Mode_Control寄存器(表5)中的MC位設置為01,可以從待機模式或正常模式中選擇睡眠模式。只要沒有待處理的中(引腳INTN =高電平)或喚醒
發(fā)表于 01-17 06:17
低溫環(huán)境CH578M進入睡眠之后立刻死掉怎么解決?
最近大降溫發(fā)現578M進入睡眠之后立刻死掉 電流維持再10MA如果把板子靠近熱源 例如暖手寶這些東西 就能正常睡眠。跑的是ble_uart睡眠歷程。間隙性喚醒休眠。
發(fā)表于 08-16 06:13
程序進入睡眠模式設置了定時器中斷為什么不能喚醒睡眠?
程序進入睡眠模式,設置了定時器中斷為什么不能喚醒睡眠?看了手冊,上面寫的任意中斷都可以喚醒,上面列出來定時器全局中斷可以喚醒,這個全局中斷和定時器的普通中斷(更新中斷,輸入捕獲等)有什么區(qū)別嗎?
發(fā)表于 10-19 06:57
筆記本電腦合上蓋子不進入休眠模式的問題應該如何解決
重新裝了win7 系統 升級到旗艦版,升級之后發(fā)現電腦合上蓋子不進入睡眠模式了,一直運行狀態(tài)把電腦的電都耗干了,網上搜索了很多電腦盒蓋的問題,解決方法都是右擊電源圖標的 ’電源選項‘,
發(fā)表于 08-09 17:33
?0次下載
32 系統進入stop模式_如何讓MCU進入睡眠狀態(tài)節(jié)省能耗?
我們探討過在每種Arm Cortex-M處理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令讓處理器進入睡眠模式。實際上我們真正要了解的是,低功耗模式如何在真正的微控制器上實現
發(fā)表于 11-01 16:08
?5次下載
如何讓MCU進入睡眠狀態(tài)節(jié)省能耗?
在我的上一篇文章《ARM Cortex-M低功耗模式基本原理》中,我們探討了在每種Arm Cortex-M處理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令讓處理器進入睡眠模式
如何阻止電腦進入睡眠或者休眠
評論