首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非阻塞getch(),ncurses

非阻塞getch(),ncurses
EN

Stack Overflow用户
提问于 2009-05-25 01:38:01
回答 3查看 56.7K关注 0票数 29

我在阻止ncurses的getch()时遇到了一些问题。默认操作似乎是非阻塞的(或者我错过了一些初始化)?我希望它能像Windows中的getch()那样工作。我已经尝试过不同版本的

代码语言:javascript
复制
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...

(不是在同一时间)。如果可能的话,我不希望(显式地)使用任何WINDOW。一个围绕getch()的while循环,检查特定的返回值也是可以的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-25 02:11:54

诅咒库是一个套餐交易。在没有正确初始化库的情况下,您不能只提取一个例程并希望得到最好的结果。这是一段在getch()上正确阻塞的代码

代码语言:javascript
复制
#include <curses.h>

int main(void) {
  initscr();
  timeout(-1);
  int c = getch();
  endwin();
  printf ("%d %c\n", c, c);
  return 0;
}
票数 41
EN

Stack Overflow用户

发布于 2009-05-25 01:44:02

来自a man page (已添加强调):

timeoutwtimeout例程为给定窗口设置阻塞或非阻塞读取。如果 delay 为负,则使用阻塞读取(即无限期等待输入)。

票数 11
EN

Stack Overflow用户

发布于 2009-05-25 02:08:07

您需要调用initscr()newterm()来初始化curses,然后它才能工作。这对我来说很好:

代码语言:javascript
复制
#include <ncurses.h>

int main() {
    WINDOW *w;
    char c;

    w = initscr();
    timeout(3000);
    c = getch();
    endwin();

    printf("received %c (%d)\n", c, (int) c);
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/905060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档