我在我的main函数中使用了一个如下所示的循环:
while (1)
{
cout << "Hello world" << endl;
}
如何在按下按键时暂停此循环并恢复? 例如:当我按住[TAB]时,循环运行。当我放手时,循环再次暂停。
答案 0 :(得分:1)
您可以使用GetAsyncKeyState()
这是一个适应你所描述的: 已编辑 ,以便在 SHIFT 键被点击时退出循环。
#include <stdio.h> //Use these includes: (may be different on your environment)
#include <windows.h>
BOOL isKeyDown(int key) ;
int main(void)
{
int running = 1;
while(running)
{
while(!isKeyDown(VK_TAB)); //VK_TAB & others defined in WinUser.h
printf("Hello World");
Delay(1.0);
if(isKeyDown(VK_SHIFT)) running = 0;//<SHIFT> exits loop
}
return 0;
}
BOOL isKeyDown(int key)
{
int i;
short res;
res = GetAsyncKeyState(key);
if((0x80000000 &res != 0) || (0x00000001 & res != 0)) return TRUE;
return FALSE;
}
答案 1 :(得分:0)
我不知道你是否打算使用线程...但我想出了一个解决方案,将循环置于一个线程中,然后在主线程上检查TAB键状态。如果按下键,则主线程唤醒循环线程,如果没有按下,则主线程挂起循环线程。看看:
#include<windows.h>
#include<iostream>
using namespace std;
bool running = false;
DWORD WINAPI thread(LPVOID arg)
{
while (1)
{
cout << "Hello world" << endl;
}
}
void controlThread(void)
{
short keystate = GetAsyncKeyState(VK_TAB);
if(!running && keystate < 0)
{
ResumeThread(h_thread);
running = true;
}
else if(running && keystate >= 0)
{
SuspendThread(h_thread);
running = false;
}
}
int main(void)
{
HANDLE h_thread;
h_thread = CreateThread(NULL,0,thread,NULL,0,NULL);
SuspendThread(h_thread);
while(1)
{
controlThread();
//To not consume too many processing resources.
Sleep(200);
}
}
我的主要使用一个循环来继续检查按键...但你可以在程序的特定点上做到这一点,避免无限循环。