当用户按下特定键时,我想运行一个单独的线程来关闭程序。这是我程序的结构。
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI foo(LPVOID lpParameter)
{
//do something
return 0;
}
DWORD WINAPI boo(LPVOID lpParameter)
{
//do something
return 0;
}
int main(int argc, char **argv)
{
HANDLE foo1,boo1;
while(true)
{
foo1 = CreateThread(NULL,0,foo,NULL,0,NULL);
boo1= CreateThread(NULL,0,boo,NULL,0,NULL);
//do something
}
return 0;
}
我在while循环中创建了两个线程,以保持程序运行。因此,我想添加另一个线程,以便在用户按下某个键(程序运行时)并将其与特定的已定义字符进行比较后获取用户输入,如果它们匹配则关闭程序。
我不知道那样做。有人能帮助我吗?
PS:我必须只使用线程:)
答案 0 :(得分:0)
您没有创建两个线程。您正在无限循环中创建线程,直到内存不足为止。此外,您的main已经在一个单独的线程上运行,因此您可以在那里进行用户输入。例如:
HANDLE hevent = NULL;
bool done = false;
DWORD WINAPI foo(LPVOID lpParameter)
{
while(!done)
{
::WaitForSingleObject(hevent, -1);
printf("\rfoo");
Sleep(1000);
::ResetEvent(hevent);
}
return 0;
}
DWORD WINAPI boo(LPVOID lpParameter)
{
while(!done)
{
printf("\rboo");
Sleep(1000);
SetEvent(hevent);
}
return 0;
}
int main(int argc, char **argv)
{
HANDLE foo1,boo1;
hevent = CreateEvent(NULL, TRUE, TRUE, NULL);
foo1 = CreateThread(NULL,0,foo,NULL,0,NULL);
boo1= CreateThread(NULL,0,boo,NULL,0,NULL);
HANDLE handles[] = {foo1, boo1};
char c = getchar();
done = true;
::WaitForMultipleObjects(2, handles, TRUE, -1);
return 0;
}