0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何阻止電腦進(jìn)入睡眠或者休眠

CHANBAEK ? 來源:頭條號(hào)NCG杰哥 ? 作者:頭條號(hào)NCG杰哥 ? 2023-02-28 14:30 ? 次閱讀

通常我們使用電腦過程中會(huì)設(shè)置多長時(shí)間不操作,電腦就會(huì)滅屏、睡眠甚至是休眠。 如果電腦進(jìn)入睡眠或者休眠模式,電腦運(yùn)行的程序?qū)⒉辉賵?zhí)行。 如果我們?cè)O(shè)計(jì)的桌面程序一直在執(zhí)行某種操作,比如持續(xù)的USB通信,操作人可能會(huì)離開很久,這個(gè)時(shí)候,我們不希望電腦進(jìn)入睡眠或者休眠模式。 那么該如何實(shí)現(xiàn)這一功能呢?

系統(tǒng)中相關(guān)接口文件是提供了這一功能,即調(diào)用如下方法即可:

[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,
}

如上所示,只需要設(shè)置系統(tǒng)狀態(tài)即可,ExcutionState各個(gè)枚舉變量的含義為:SystemRequired,強(qiáng)行設(shè)置系統(tǒng)IDLE計(jì)時(shí)器,使得系統(tǒng)一直處于工作態(tài); DisplayRequired,通過重置顯示器IDLE計(jì)時(shí)器,使得顯示器一直處于顯示狀態(tài); Continues,系統(tǒng)狀態(tài)維持當(dāng)前狀態(tài),直到下一次方法調(diào)用或者標(biāo)志位改變。

系統(tǒng)狀態(tài)枚舉變量

具體調(diào)用方法如下:

// 設(shè)置此線程此時(shí)開始一直將處于運(yùn)行狀態(tài),此時(shí)計(jì)算機(jī)不應(yīng)該進(jìn)入睡眠狀態(tài)。
// 此線程退出后,設(shè)置將失效。
// 如果需要恢復(fù),請(qǐng)調(diào)用 <"RestoreForCurrentThread"/> 方法。
// 
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對(duì)于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對(duì)于后臺(tái)服務(wù)、下載和監(jiān)控等任務(wù)則不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
	SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}

//恢復(fù)此線程的運(yùn)行狀態(tài),操作系統(tǒng)現(xiàn)在可以正常進(jìn)入睡眠狀態(tài)和關(guān)閉屏幕。
public static void RestoreForCurrentThread()
{
	SetThreadExecutionState(ExecutionState.Continues);
}

// 重置系統(tǒng)睡眠或者關(guān)閉屏幕的計(jì)時(shí)器,這樣系統(tǒng)睡眠或者屏幕能夠繼續(xù)持續(xù)工作設(shè)定的超時(shí)時(shí)間。
// 
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對(duì)于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對(duì)于后臺(tái)服務(wù)、下載和監(jiān)控等任務(wù)則不需要。
public static void ResetIdle(bool keepDisplayOn)
{
	SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}

因此,只要調(diào)用ResetIdle(true)就可以實(shí)現(xiàn)屏幕常亮并且系統(tǒng)運(yùn)行正常。 如果要取消只要調(diào)用RestoreForCurrentThread()即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 顯示器
    +關(guān)注

    關(guān)注

    21

    文章

    4862

    瀏覽量

    139357
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7773

    瀏覽量

    262392
  • 電腦
    +關(guān)注

    關(guān)注

    15

    文章

    1660

    瀏覽量

    68187
  • 計(jì)時(shí)器
    +關(guān)注

    關(guān)注

    1

    文章

    414

    瀏覽量

    32487
  • 睡眠
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    8058
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CY8C4045AZI-S413使用外部時(shí)鐘 (48MHz) 而不是內(nèi)部時(shí)鐘時(shí)可以進(jìn)入睡眠模式嗎?

    (48MHz),設(shè)備能否僅通過執(zhí)行 cysyspmSleep () API 進(jìn)入睡眠模式? 或者,如果用戶使用外部時(shí)鐘,用戶是否需要進(jìn)行其他處理? 當(dāng)外部時(shí)鐘為 48MHz 時(shí),您是否有睡眠模式下
    發(fā)表于 02-26 06:36

    STM32F103進(jìn)入睡眠模式或者待機(jī)模式或者停機(jī)模式,IO腳原先設(shè)置的電平值是否會(huì)改變?

    STM32F103進(jìn)入睡眠模式或者待機(jī)模式或者停機(jī)模式,IO腳原先設(shè)置的電平值是否會(huì)改變? 鎖定STM32F103的IO腳,那么當(dāng) STM32F103進(jìn)入睡眠模式
    發(fā)表于 05-17 09:22

    使用wifi_set_sleep_type設(shè)置為light sleep后無法進(jìn)入休眠怎么解決?

    使用wifi_set_sleep_type設(shè)置為light sleep后無法進(jìn)入休眠,模塊電流一直在80mA左右,(用強(qiáng)制light sleep休眠可以到十幾mA) 手冊(cè)說調(diào)用wifi_set_sleep_type后“由系統(tǒng)底層
    發(fā)表于 07-22 06:12

    WICED 6.0如何進(jìn)入睡眠模式?

    你好:?jiǎn)栴}一:在版本5之后,沒有“WiDeDeHalyLPM .h”文件,進(jìn)入和退出原來的睡眠模式已經(jīng)無法實(shí)現(xiàn),現(xiàn)在6套睡眠模式的API是哪里?問題二:此外,將睡眠設(shè)置在“MyHyAp
    發(fā)表于 12-11 14:54

    請(qǐng)問SIM800A進(jìn)入睡眠模式后進(jìn)行喚醒有外部引腳進(jìn)行電平變換進(jìn)行指示嗎?

    SIM800A進(jìn)入睡眠模式后進(jìn)行喚醒有沒有外部引腳進(jìn)行電平變換進(jìn)行指示?。?b class='flag-5'>或者在睡眠模式中突然接收到了GPRS信號(hào)有沒有外部引腳進(jìn)行電平變換指示?
    發(fā)表于 06-12 04:35

    STM32F429進(jìn)入睡眠的方式

    睡眠進(jìn)入睡眠的方式很簡(jiǎn)單:只需要調(diào)用WFI 或WFE 命令,在睡眠模式中,內(nèi)核停止,但是所有外設(shè),包括M4 核心的外設(shè)均處于工作狀態(tài)中。喚醒睡眠的方式:任一中斷;喚醒事件。// Wai
    發(fā)表于 08-11 06:38

    筆記本電腦win10連接電源時(shí)無法進(jìn)入睡眠的原因

    筆者的筆記本電腦(win10)一直有一個(gè)問題,就是當(dāng)筆記本連接電源的時(shí)候,無法進(jìn)入睡眠,苦思很久,一直沒找到答案。無論怎么設(shè)置電源選項(xiàng),合蓋子、按電源鍵都沒有睡眠的效果,電腦只是黑屏,
    發(fā)表于 12-27 06:01

    進(jìn)入睡眠模式(Sleep)的條件有哪些

    進(jìn)入睡眠模式(Sleep)的條件:通過將Mode_Control寄存器(表5)中的MC位設(shè)置為01,可以從待機(jī)模式或正常模式中選擇睡眠模式。只要沒有待處理的中(引腳INTN =高電平)或喚醒
    發(fā)表于 01-17 06:17

    低溫環(huán)境CH578M進(jìn)入睡眠之后立刻死掉怎么解決?

    最近大降溫發(fā)現(xiàn)578M進(jìn)入睡眠之后立刻死掉 電流維持再10MA如果把板子靠近熱源 例如暖手寶這些東西 就能正常睡眠。跑的是ble_uart睡眠歷程。間隙性喚醒休眠
    發(fā)表于 08-16 06:13

    如和讓STM8S與STM8L安全地進(jìn)入睡眠狀態(tài)呢?

    MCU 進(jìn)入睡眠狀態(tài)——當(dāng)所有標(biāo)志都被清除時(shí)。但我不能簡(jiǎn)單地寫:if(!flag1 && !flag2 ...){ go_to_sleep();}因?yàn)闈撛诘母?jìng)爭(zhēng)條件。可以在 if 語句
    發(fā)表于 12-08 06:12

    程序進(jìn)入睡眠模式設(shè)置了定時(shí)器中斷為什么不能喚醒睡眠?

    程序進(jìn)入睡眠模式,設(shè)置了定時(shí)器中斷為什么不能喚醒睡眠?看了手冊(cè),上面寫的任意中斷都可以喚醒,上面列出來定時(shí)器全局中斷可以喚醒,這個(gè)全局中斷和定時(shí)器的普通中斷(更新中斷,輸入捕獲等)有什么區(qū)別嗎?
    發(fā)表于 10-19 06:57

    筆記本電腦合上蓋子不進(jìn)入休眠模式的問題應(yīng)該如何解決

    重新裝了win7 系統(tǒng) 升級(jí)到旗艦版,升級(jí)之后發(fā)現(xiàn)電腦合上蓋子不進(jìn)入睡眠模式了,一直運(yùn)行狀態(tài)把電腦的電都耗干了,網(wǎng)上搜索了很多電腦盒蓋的問題,解決方法都是右擊電源圖標(biāo)的 ’電源選項(xiàng)‘,
    發(fā)表于 08-09 17:33 ?0次下載
    筆記本<b class='flag-5'>電腦</b>合上蓋子不<b class='flag-5'>進(jìn)入</b><b class='flag-5'>休眠</b>模式的問題應(yīng)該如何解決

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

    我們探討過在每種Arm Cortex-M處理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令讓處理器進(jìn)入睡眠模式。實(shí)際上我們真正要了解的是,低功耗模式如何在真正的微控制器上實(shí)現(xiàn)
    發(fā)表于 11-01 16:08 ?5次下載
    32 系統(tǒng)<b class='flag-5'>進(jìn)入</b>stop模式_如何讓MCU<b class='flag-5'>進(jìn)入睡眠</b>狀態(tài)節(jié)省能耗?

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

    APM32F103XC_TMR_關(guān)閉DMA進(jìn)入睡眠模式出現(xiàn)故障
    發(fā)表于 11-09 21:03 ?0次下載
    APM32F103XC_TMR_關(guān)閉DMA<b class='flag-5'>進(jìn)入睡眠</b>模式出現(xiàn)故障

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

    在我的上一篇文章《ARM Cortex-M低功耗模式基本原理》中,我們探討了在每種Arm Cortex-M處理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令讓處理器進(jìn)入睡眠模式
    的頭像 發(fā)表于 08-04 14:27 ?530次閱讀
    如何讓MCU<b class='flag-5'>進(jìn)入睡眠</b>狀態(tài)節(jié)省能耗?