按ESC键结束线程的问题

paschen paschen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面这段代码是VS2010控制台下写的按ESC结束创建的线程
可按下ESC后,最后一句“线程已结束”为何不会输出到屏幕上,
单步的时候可以运行到那一句的,可也不会显示在屏幕上
是什么原因?


#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;
}
...全文
评论 13
收藏 已收藏
分享
返回顶部
paschen
C++ 语言 65,214 成员 250,514 内容