21xrx.com
2025-04-04 03:45:43 Friday
文章检索 我的文章 写文章
C++非阻塞getch函数实现输入不等待
2023-06-26 14:51:05 深夜i     27     0
C++ 非阻塞 getch函数 输入 不等待

在C++编程中,使用getch函数可以实现获取键盘输入的功能,但是默认情况下,当用户输入时,程序会等待用户输入完成后再进行操作,这就是所谓的“阻塞”。在某些情况下,我们需要实现一个非阻塞的getch函数,使得程序可以同时进行其他操作而不会影响到键盘输入的获取。下面就介绍一种实现方法。

具体实现方法如下:

1. 定义一个宏定义来进行判断,如果是Windows系统,则使用conio.h头文件,否则使用termios.h头文件。

#ifdef _WIN32
#include <conio.h>
#else
#include <termios.h>
#endif

2. 定义一个函数来实现非阻塞的键盘输入获取,本例中函数命名为nbgetch()。其中,使用了一种Linux中常见的方法——设置终端特殊模式:将输入模式设置为非标准输入模式,这样在输入时就不会等待回车符了。

int nbgetch() {
#ifdef _WIN32
  return _getch();
#else
  struct termios oldt, newt;
  int ch;
  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  ch = getchar();
  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  return ch;
#endif
}

3. 在主函数中调用该函数进行键盘输入获取,具体调用方法如下:

char c = nbgetch();

需要注意的是,在使用该函数时,由于输入不等待回车符,需要在输入后手动添加换行符来结束该输入。

总结:

通过以上步骤,我们就可以实现一个非阻塞的键盘输入获取函数,使得程序可以同时进行其他操作而不会影响到键盘输入的获取。同时,由于该方法是使用Linux常见的方法进行实现,所以在Windows和Linux两个系统中均可以使用该函数。

  
  

评论区