用户按下特定键时,运行一个线程关闭程序

时间:2016-09-20 17:31:59

标签: c++ multithreading

当用户按下特定键时,我想运行一个单独的线程来关闭程序。这是我程序的结构。

#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:我必须只使用线程:)

1 个答案:

答案 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;
}