1

我正在使用带有 WinAPI 的 C++ 进行编码,并且为了使计算机休眠,我使用以下调用:

SetSuspendState(TRUE, NULL, FALSE);

但是发生的情况是,如果计算机安装了更大的 RAM 阵列,则休眠会失败。

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

4

3 回答 3

1

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

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

于 2012-07-07T12:01:31.267 回答
1

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

如果您想处理多个操作系统版本,会有些麻烦,但这是可行的。

于 2012-07-09T03:47:11.387 回答
0

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

于 2012-07-06T22:13:31.313 回答