c++ - SetSuspendState() API 在 Win8 中永远不会返回

标签 c++ winapi visual-c++ windows-8 sleep

让我解释一下我的问题陈述:

在我的 VC++ 项目中,我想插入一个逻辑,以编程方式将我的系统 (Windows 8) 发送到 sleep 状态并恢复。

我是这样做的(复制代码片段)::

int wait = 100;
LARGE_INTEGER WaitTime;
    WaitTime.QuadPart = wait;
    WaitTime.QuadPart *= -10000000;

HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
        if(0 == SetWaitableTimer(hTimer, &WaitTime, 0, NULL, NULL, TRUE))
        {
            res = false;
            return res;
        }
        if(0 == SetSuspendState(FALSE, FALSE, FALSE))
        {
            res = false;
            return res;
        }

系统即将休眠(显示器正在关闭)。
在这里,我想在调用 SetSuspendState() API 后从 sleep 状态恢复。 但我发现 SetSuspendState() 调用根本没有返回。控件将在此 SetSuspendState() 调用本身中被击中并且不会返回

但是,如果我强行让系统恢复供电,我会看到它恢复了,但函数“SetSuspendState()”不会在我的代码中返回。

谁能帮我弄清楚为什么 SetSuspendState() 没有返回以及如何解决这个问题。提前致谢。

PS:我正在使用VS远程调试器机制来实现这种休眠状态。

最佳答案

我想调用 SetSuspendState 会导致远程调试服务器关闭。当您调用 SetSuspendState 时,系统开始关闭,这涉及通知所有应用程序系统正在关闭。发生这种情况时,这些应用程序将终止。因此,您可能会失去与远程调试器的连接。

关于c++ - SetSuspendState() API 在 Win8 中永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123179/

相关文章:

android - Qt 如何连接到 android 操作系统中的现有 SQLite 文件?

c++ - 库在静态和动态链接中的顺序

C++ 从 ‘const type* const’ 到 ‘type*’ 的无效转换

c++ - 在 win32 中发送十六进制值不能像 C++ 代码那样工作

assembly - Visual Studio C++ 的函数序言

c++ - 给定代码示例中 vector::push_back() 中的 "the argument is copied (or moved)"究竟意味着什么?

c++ - 在 C++ 中从屏幕选择创建位图时的黑色图像

windows - Hook 特定进程的注册表访问的简单方法

c++ - 为什么必须在运算符重载中提供关键字 const

c++ - QT Creator 没有自动检测 MSVC2017 64 位编译器