在写多线程下,利用读取到“ESC”按键时直接终止所有程序时,需要用到。
网上查找到的方式是使用getch()函数,但是它所在的头文件在getch()中不可用(但现在最新好像可以用了,或者是有资源的),寻找替代的方式,但是网上的替代方式 基本都是针对读取字符不回显,在这里也给出链接:https://blog.csdn.net/weixin_33713707/article/details/85736998
但是这个方式不能解决多线程下,主线程读取到字符立马退出程序的效果,下面给出替代方式:
void * watch(void *data)
107 {
108 while(1)
109 {
110 system("stty raw");
111 char c = getchar();
112 system("stty cooked");
113 if(c == 27)
114 {
115 printf("get the esc, end!\n");
116 exit(0);
117 }
118
119 }
120
121 return NULL;
122 }
原理:stty raw是终端进入一字符一读入的模式
stty cooked是回到一行一读入的模式
但是,这个方式目前有bug,就是这样会导致控制台的输出会出现混乱(几率问题,有时按下esc后可以看到终端输出是正常的),未解决。。。
关于多线程,这个读取到esc立即退出程序的线程必须放在第一位,否则无效。
下附文件。