前几天它才打我。当我告诉计算机进入Stand-By或Hibernate时会发生什么?
更具体地说,它对正在运行的代码有什么影响(如果有的话)?例如,如果应用程序正在压缩某些文件,编码视频文件,检查电子邮件,运行数据库查询,生成报告或只处理大量数据或执行复杂的数学操作。怎么了?您最终可能会在视频中出现错误吗?数据库查询失败了吗?数据处理最终会包含错误吗?
我出于一般的好奇心问这个问题,但也因为我开始怀疑这是我在编程时应该考虑的事情。
答案 0 :(得分:6)
你应该记住,OS(调度程序)每秒冻结你的程序大约数十亿次。这意味着当操作系统冻结程序时,您的程序已经可以很好地运行了。从您的角度来看,在待机,休眠和上下文切换之间没有太大区别。
不同的是,你会被冻结很长一段时间。这是你唯一需要考虑的事情。在大多数情况下,这应该不是问题。
如果您有网络连接,则可能需要重新建立它,以及类似的问题。但这只是意味着检查所有IO操作中的错误,我相信你已经在做了......: - )
答案 1 :(得分:3)
我最初的想法是,只要您的程序及其生态系统包含在待机或休眠的电脑中,那么,在恢复后,您的程序不应受到影响。
但是,如果您要更新托管在单独计算机上的某个数据库中的记录,则休眠/待机将被视为超时。
如果您的程序依赖于“电源状态”的这种更改,您可以按照msdn
中的提及收听WM_POWERBROADCAST消息答案 2 :(得分:2)
待机通过将其保存在RAM中来保持“状态”存活。因此,如果你失去了力量,你将失去你存储的“状态”。
但它可以更快地实现。
休眠将您的“状态”存储在硬盘上的虚拟RAM中,因此如果断电,您仍可在三天后返回。但它的速度较慢。
我认为待机的限制是你有多少RAM,但我确信当标准RAM耗尽时,备用服务器必须使用虚拟RAM。我会看起来然后回来!
答案 3 :(得分:1)
关于ACPI的维基百科文章包含有关现代PC中不同省电模式的详细信息。
根据我的理解,这是基本的想法:
基本思想是保持系统的当前状态,因此当机器恢复运行时,它可以在机器进入睡眠/待机/休眠状态之前的状态恢复。等等。它作为您PC的序列化。
在待机状态下,计算机将继续为RAM供电,因为主存储器为volatile memory,需要常量refreshing才能保持其状态。这意味着可以关闭硬盘驱动器,CPU和其他组件,只要有足够的电量来保持DRAM刷新以防止其内容消失。
在休眠模式下,主内存也将关闭,因此必须先将内容复制到永久存储设备(如硬盘驱动器),然后再关闭系统电源。除此之外,hiberation的基本前提与standby相同 - 存储当前机器的状态以便以后恢复。
考虑到这一点,进入待机或休眠状态可能不太可能导致当前正在执行的任务出现问题。但是,允许网络活动在执行过程中停止可能不是一个好主意,因为根据协议,您的网络连接可能会超时并且在将系统返回其运行状态时无法恢复。
此外,可能有一些机器只有片状省电驱动器可能会导致它进入待机状态并且永远不会回来,但这完全是另一个问题。
答案 4 :(得分:0)
对您的代码有一些影响。休眠不仅仅是调度程序的上下文切换。在休眠期间,网络连接将被关闭,网络驱动器或可移动媒体可能会断开连接,...
我不认为您的应用程序可以通知休眠(但我可能错了)。您应该做的是尽可能优雅地处理错误情况(例如,丢失网络连接)。请注意,这些错误情况也可能在正常操作期间发生,而不仅仅是在进入休眠状态时......