首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

按ESC键结束线程的有关问题

2012-05-09 
按ESC键结束线程的问题下面这段代码是VS2010控制台下写的按ESC结束创建的线程可按下ESC后,最后一句“线程已

按ESC键结束线程的问题
下面这段代码是VS2010控制台下写的按ESC结束创建的线程
可按下ESC后,最后一句“线程已结束”为何不会输出到屏幕上,
单步的时候可以运行到那一句的,可也不会显示在屏幕上
是什么原因?

C/C++ code
#include <iostream>#include <Windows.h>#include <stdio.h>using namespace std;DWORD WINAPI ThreadFunc(LPVOID lParam){    cout<<"线程开始运行"<<endl;    while(true)    {        cout<<"线程运行中.."<<endl;    }    return 0;}int main(){    //创建线程    DWORD threadId;    HANDLE hTread = CreateThread(NULL,0,ThreadFunc,NULL,0,&threadId);    //判断是否按下了ESC,如果按下,终止线程    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);     INPUT_RECORD irInBuf[1];     DWORD cNumRead;    while(true)    {        ReadConsoleInput(hStdin,irInBuf,1,&cNumRead);        if(irInBuf[0].Event.KeyEvent.bKeyDown && irInBuf[0].Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)        {            cout<<"按下了ESC"<<endl;            TerminateThread(hTread,0);            break;        }    }    cout<<"线程已结束"<<endl;    //.....    return 0;}


[解决办法]
C/C++ code
int main(){    //创建线程    DWORD threadId;    HANDLE hTread = CreateThread(NULL,0,ThreadFunc,NULL,0,&threadId);    //判断是否按下了ESC,如果按下,终止线程    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);     INPUT_RECORD irInBuf[1];     DWORD cNumRead;    while(true)    {        ReadConsoleInput(hStdin,irInBuf,1,&cNumRead);        if(irInBuf[0].Event.KeyEvent.bKeyDown && irInBuf[0].Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)        {            cout<<"按下了ESC"<<endl;    //        TerminateThread(hTread,0);            CloseHandle(hTread);            break;        }    }     cout<<"线程已结束"<<endl;     return 0;} 

热点排行