【发布时间】:2012-07-06 22:09:14
【问题描述】:
我正在使用带有 WinAPI 的 C++ 进行编码,为了使计算机休眠,我使用以下调用:
SetSuspendState(TRUE, NULL, FALSE);
但是如果计算机安装了更大的 RAM 阵列,则休眠会失败。
所以我想知道,如果休眠失败,Windows 会发送任何通知吗?如果没有,如何判断我的休眠请求是否失败?
【问题讨论】:
-
您使用
NULL作为第二个参数(FALSE在技术上更正确,因为它是BOOLEAN)。应用程序是否有可能阻止该操作,但该函数仍会从中返回TRUE? -
看起来在 Windows 8 之前没有直接的方法来检测休眠。但我想你可以空闲循环并观察系统时间。如果时间突然向前跳跃,则您已成功休眠(并恢复!),如果在一分钟左右内没有发生这种情况,则请求可能失败。
-
您还可以检查有问题的系统,当休眠失败时,Windows 是否将任何内容写入事件日志。如果是这样,您的应用程序可以监控相关条目的事件日志。
-
谢谢各位。我使用 NULL 作为第二个参数,因为它自 Vista 以来就没有使用过。 @HarryJohnston 你将如何在 Windows 8 中做到这一点?您的系统时间观察方法也很酷。我唯一担心的是系统时间更改或夏令时调整的情况。那个怎么样?无论如何,这似乎是一个答案。要不要单独发,我标记一下?
标签: c++ windows winapi hibernation