如何在同时做其他事情的同时从键盘输入?

时间:2010-10-15 06:13:01

标签: c ncurses

我正在使用C(gcc)和ncurses来制作一个程序来监控来自串口的数据。该程序有一个很大的while,它读取来自端口的数据,同时,它在屏幕上打印该信息......

但问题在于:

如何从键盘读取输入,(因为getch()冻结程序直到获得输入)并同时读取来自端口的信息?

也许我必须使用另一种方式(不是大while),所以欢迎这些想法!

5 个答案:

答案 0 :(得分:8)

使用 nodelay 选项使 getch 成为非阻止通话。

nodelay(stdscr,TRUE);

可以在http://www.gsp.com/cgi-bin/man.cgi?topic=nodelay

找到更多信息

答案 1 :(得分:0)

根据你的环境你可能有kbhit()函数,它只是在键盘缓冲区中达到峰值并且如果有一个键则返回非零 - 那么你可以做getch()。

(CONIO.H)

答案 2 :(得分:0)

也许fork()?请记住,子进程在一个单独的进程中运行,因此不能直接在它们之间共享变量

pid_t pID = fork();
if (pID == 0) {                // child
   // Code  executed only by child process
   // getch() ...
} else if (pID < 0) {          // failed to fork
   // Throw exception
   // ... 
} else {                       // parent
   // Code executed only by parent process
   // ...
}

答案 3 :(得分:0)

尝试select()poll()。他们都做同样的事情,但有不同的接口。你给它一个文件描述符列表,它会等到这些描述符中至少有一个准备就绪,然后返回并告诉你哪些可以不受阻塞地读取(或写入)。查看链接以获取示例和更多详细信息。

答案 4 :(得分:-1)

使用cbreak()禁用线路缓冲

nodelay(win, TRUE); 

这将为您提供非阻塞getch()功能。