c++ - Sleep(x) 导致计算机进入休眠状态

标签 c++ windows sleep

这可能是迄今为止我在 C++ 中遇到的最奇怪的事情之一:

while(counter != stop_value)
{
    //Part A starting
    ip.ki.wVk = VK_RETURN;
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.wVk = VK_RETURN;
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    //Part A ending

    if (s == 2) counter++;
    else counter--;
    cout << counter; //for debugging
    Sleep(i);
}

每当我将“A 部分”部分注释掉时,它都能正常工作;程序休眠 i 秒,具体取决于用户输入。但是,只要我再次添加触发返回键的简单方法,它就会让我的整个计算机进入休眠状态(也就是屏幕完全变黑 i 秒)。我试过谷歌搜索,但找不到任何相关信息。

而且,这只是代码的一小部分。我已经添加了 INPUT 类和其他所有内容。 s 也是一个用户定义的变量,(在本例中)可以在 2 和 3 之间变化。如果等于 2,计数器的值将被设置为 0,并且它会增加直到它有达到其最大值(这是用户定义的,并设置为 stop-value)。使用this 方法时,sleep 功能正常工作,只有程序“暂停” i 秒。但是,一旦用户将 s 设置为 3,它就会从最大值(用户定义)开始递减,直到达到其停止值,该值始终为零。发生这种情况时,屏幕会变黑。

我已经尝试了很长时间的调试,但我似乎找不到解决方案...因为代码比这复杂得多,而且我需要使用更多的空间(我没有不想),我会为您提供一些您可以改用的变量的输入:

  • 工作输入: counter = 0;停止值 = 21;小号 = 2; i = 1000;
  • 导致屏幕黑屏的输入: counter = 20;停止值 = 0;小号 = 3; i = 1000;

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx

最佳答案

不妨把它作为一个答案:)

您是否将 ip 的类型设置为 INPUT_KEYBOARD?您是否在使用前在结构上使用了 ZeroMemory

关于c++ - Sleep(x) 导致计算机进入休眠状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711983/

相关文章:

c++ - 删除 vector vector C++ 中的 vector

android - Ubuntu 会让上网本上的 android 编程更容易吗?

有人可以告诉我为什么会出现这个运行时错误吗?

php - php上的休眠功能

android - System.nanoTime() 在 Android 中给出了错误的时间

c++ - 为非常大的列表选择 STL 容器

c++ - 在 C++ 中使用外部文件创建数组

php - 如何在 linux 中更改 windows 或 mac 文件的文件结尾?

c++ - std::this_thread::sleep_until 时序完全偏离约 2 倍,莫名其妙

c++ - 如何让 ASan 使用 4.12.3 Linux 内核?