这大概是我在C++迄今为止遇到的最奇怪的事情之一:睡眠(X)导致计算机,而不是睡觉
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
秒内完全变黑)。我试过Google搜索,但我找不到任何关于此的内容。
而且,这只是代码的一小部分。我已经添加了INPUT类和所有的一切。 s
也是一个用户定义的变量,在这种情况下(在这种情况下)可以在2和3之间变化。如果等于2,计数器的值将被设置为0,并且它将增加,直到它达到其最大值(即用户自定义,并设置为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
如果(假设您使用的是Visual Studio)突出显示“睡眠”并按F12,它应该将您带到它定义的标题处。这应该是Windows SDK中的'WinBase.h'。如果它的功能不同,那就是你的问题。 – benjymous
注意:你最好设置远程调试 - 通常发送键盘事件和焦点相关的问题很难在同一台机器上调试... –
漂亮的不可知的,什么样的窗口或小部件准确得到这个击键?远离“格式化驱动器”菜单项。 –