0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何阻止电脑进入睡眠或者休眠

CHANBAEK 来源:头条号NCG杰哥 作者:头条号NCG杰哥 2023-02-28 14:30 次阅读

通常我们使用电脑过程中会设置多长时间不操作,电脑就会灭屏、睡眠甚至是休眠。 如果电脑进入睡眠或者休眠模式,电脑运行的程序将不再执行。 如果我们设计的桌面程序一直在执行某种操作,比如持续的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,
}

如上所示,只需要设置系统状态即可,ExcutionState各个枚举变量的含义为:SystemRequired,强行设置系统IDLE计时器,使得系统一直处于工作态; DisplayRequired,通过重置显示器IDLE计时器,使得显示器一直处于显示状态; Continues,系统状态维持当前状态,直到下一次方法调用或者标志位改变。

系统状态枚举变量

具体调用方法如下:

// 设置此线程此时开始一直将处于运行状态,此时计算机不应该进入睡眠状态。
// 此线程退出后,设置将失效。
// 如果需要恢复,请调用 <"RestoreForCurrentThread"/> 方法。
// 
// 表示是否应该同时保持屏幕不关闭。
// 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
	SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}

//恢复此线程的运行状态,操作系统现在可以正常进入睡眠状态和关闭屏幕。
public static void RestoreForCurrentThread()
{
	SetThreadExecutionState(ExecutionState.Continues);
}

// 重置系统睡眠或者关闭屏幕的计时器,这样系统睡眠或者屏幕能够继续持续工作设定的超时时间。
// 
// 表示是否应该同时保持屏幕不关闭。
// 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。
public static void ResetIdle(bool keepDisplayOn)
{
	SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}

因此,只要调用ResetIdle(true)就可以实现屏幕常亮并且系统运行正常。 如果要取消只要调用RestoreForCurrentThread()即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4739

    浏览量

    137885
  • usb
    usb
    +关注

    关注

    59

    文章

    7437

    浏览量

    258234
  • 电脑
    +关注

    关注

    15

    文章

    1602

    浏览量

    67301
  • 计时器
    +关注

    关注

    1

    文章

    395

    浏览量

    32157
  • 睡眠
    +关注

    关注

    0

    文章

    14

    浏览量

    8021
收藏 人收藏

    评论

    相关推荐

    CY8C4045AZI-S413使用外部时钟 (48MHz) 而不是内部时钟时可以进入睡眠模式吗?

    (48MHz),设备能否仅通过执行 cysyspmSleep () API 进入睡眠模式? 或者,如果用户使用外部时钟,用户是否需要进行其他处理? 当外部时钟为 48MHz 时,您是否有睡眠模式下
    发表于 02-26 06:36

    WICED 6.0如何进入睡眠模式?

    你好:问题一:在版本5之后,没有“WiDeDeHalyLPM .h”文件,进入和退出原来的睡眠模式已经无法实现,现在6套睡眠模式的API是哪里?问题二:此外,将睡眠设置在“MyHyAp
    发表于 12-11 14:54

    请问SIM800A进入睡眠模式后进行唤醒有外部引脚进行电平变换进行指示吗?

    SIM800A进入睡眠模式后进行唤醒有没有外部引脚进行电平变换进行指示啊?或者睡眠模式中突然接收到了GPRS信号有没有外部引脚进行电平变换指示?
    发表于 06-12 04:35

    STM32F429进入睡眠的方式

    睡眠进入睡眠的方式很简单:只需要调用WFI 或WFE 命令,在睡眠模式中,内核停止,但是所有外设,包括M4 核心的外设均处于工作状态中。唤醒睡眠的方式:任一中断;唤醒事件。// Wai
    发表于 08-11 06:38

    笔记本电脑win10连接电源时无法进入睡眠的原因

    笔者的笔记本电脑(win10)一直有一个问题,就是当笔记本连接电源的时候,无法进入睡眠,苦思很久,一直没找到答案。无论怎么设置电源选项,合盖子、按电源键都没有睡眠的效果,电脑只是黑屏,
    发表于 12-27 06:01

    进入睡眠模式(Sleep)的条件有哪些

    进入睡眠模式(Sleep)的条件:通过将Mode_Control寄存器(表5)中的MC位设置为01,可以从待机模式或正常模式中选择睡眠模式。只要没有待处理的中(引脚INTN =高电平)或唤醒
    发表于 01-17 06:17

    CH582M进入睡眠模式没有关闭主振是什么原因?

    电池,过程如下:1、进入睡眠前 置高A (电池供电)2、插入充电适配器,唤醒端口PA5被置低,唤醒MCU 置低A并且进入循环检测充电IC的充满信号脚(电池与充电IC同时供电)3、充满后B 置1,关闭充电
    发表于 06-21 07:43

    低温环境CH578M进入睡眠之后立刻死掉怎么解决?

    最近大降温发现578M进入睡眠之后立刻死掉 电流维持再10MA如果把板子靠近热源 例如暖手宝这些东西 就能正常睡眠。跑的是ble_uart睡眠历程。间隙性唤醒休眠
    发表于 08-16 06:13

    如和让STM8S与STM8L安全地进入睡眠状态呢?

    MCU 进入睡眠状态——当所有标志都被清除时。但我不能简单地写:if(!flag1 && !flag2 ...){ go_to_sleep();}因为潜在的竞争条件。可以在 if 语句
    发表于 12-08 06:12

    M261芯片如何进入睡眠和深度睡眠模式,以及如何退出来?有没有C语言参考?

    M261芯片如何进入睡眠和深度睡眠模式,以及如何退出来?有没有C语言参考?
    发表于 06-20 07:19

    程序进入睡眠模式设置了定时器中断为什么不能唤醒睡眠

    程序进入睡眠模式,设置了定时器中断为什么不能唤醒睡眠?看了手册,上面写的任意中断都可以唤醒,上面列出来定时器全局中断可以唤醒,这个全局中断和定时器的普通中断(更新中断,输入捕获等)有什么区别吗?
    发表于 10-19 06:57

    笔记本电脑合上盖子不进入休眠模式的问题应该如何解决

    重新装了win7 系统 升级到旗舰版,升级之后发现电脑合上盖子不进入睡眠模式了,一直运行状态把电脑的电都耗干了,网上搜索了很多电脑盒盖的问题,解决方法都是右击电源图标的 ’电源选项‘,
    发表于 08-09 17:33 0次下载
    笔记本<b class='flag-5'>电脑</b>合上盖子不<b class='flag-5'>进入</b><b class='flag-5'>休眠</b>模式的问题应该如何解决

    32 系统进入stop模式_如何让MCU进入睡眠状态节省能耗?

    我们探讨过在每种Arm Cortex-M处理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令让处理器进入睡眠模式。实际上我们真正要了解的是,低功耗模式如何在真正的微控制器上实现
    发表于 11-01 16:08 5次下载
    32 系统<b class='flag-5'>进入</b>stop模式_如何让MCU<b class='flag-5'>进入睡眠</b>状态节省能耗?

    APM32F103XC_TMR_关闭DMA进入睡眠模式出现故障

    APM32F103XC_TMR_关闭DMA进入睡眠模式出现故障
    发表于 11-09 21:03 0次下载
    APM32F103XC_TMR_关闭DMA<b class='flag-5'>进入睡眠</b>模式出现故障

    如何让MCU进入睡眠状态节省能耗?

    在我的上一篇文章《ARM Cortex-M低功耗模式基本原理》中,我们探讨了在每种Arm Cortex-M处理器上可以找到的低功耗模式的基本原理,以及如何使用WFI和WFE指令让处理器进入睡眠模式
    的头像 发表于 08-04 14:27 430次阅读
    如何让MCU<b class='flag-5'>进入睡眠</b>状态节省能耗?