睡眠(x)导致计算机睡眠

时间:2013-10-31 16:34:14

标签: 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秒,具体取决于用户输入。但是,只要我再次添加触发返回键的简单方法,它就会使我的整个计算机处于睡眠状态(AKA,屏幕在i秒内完全变黑)。我试过谷歌搜索,但我找不到任何关于这个。

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

我已经尝试了多年的调试,我似乎无法找到解决方案...因为代码比这更复杂,我需要使用更多的空间(我不喜欢我想要的,我会给你一些输入,你可以使用变量:

  • 工作输入: counter = 0; stop_value = 21; s = 2; i = 1000;
  • 输入导致屏幕停电: counter = 20; stop_value = 0; s = 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

1 个答案:

答案 0 :(得分:1)

也可以坚持下去作为答案:)

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