21xrx.com
2024-11-10 00:38:03 Sunday
登录
文章检索 我的文章 写文章
C++非阻塞getch函数实现输入不等待
2023-06-26 14:51:05 深夜i     --     --
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两个系统中均可以使用该函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章