休眠失败时的Windows通知

时间:2012-07-06 22:09:14

标签: c++ windows winapi hibernation

我正在使用C ++编写WinAPI编码,并使用以下调用来休眠计算机:

SetSuspendState(TRUE, NULL, FALSE);

但是,如果计算机安装了更大的RAM阵列,则休眠将失败。

所以我想知道,如果休眠失败,Windows会发送任何通知吗?如果没有,如何判断我的休眠请求是否失败?

3 个答案:

答案 0 :(得分:1)

看起来没有直接的方法来检测休眠[ 更正:我错了。请参阅Fowl的回答。] ,直到Windows 8(见PowerRegisterSuspendResumeNotification)。但我想你可以闲置循环并观察系统时间。如果时间突然向前跳跃,你已经成功休眠(并恢复了!),如果在一分钟左右没有发生这种情况,请求可能会失败。我认为你可以使用GetTickCount64函数,它对系统时间变化不敏感,但显然包含了睡眠时间的偏差。如果这不起作用,请使用GetSystemTimeAsFileTime,但也要注意WM_TIMECHANGE条消息。

您还可以检查有问题的系统,当休眠失败时,Windows是否向事件日志写入任何内容。如果是这样,您的应用程序可以监视相关条目的事件日志。这将是一种更可靠的方法。

答案 1 :(得分:1)

注册(RegisterPowerSettingNotification),然后收听WM_POWERBROADCAST,然后查询事件日志以获取更多详细信息。

如果你想要处理多个操作系统版本,有点麻烦,但它是可行的。

答案 2 :(得分:0)

嗯...也许我在这里忽略了这一点,但根据文档,如果失败,它应该返回FALSE。在你的情况下它仍然返回TRUE吗?