我正在使用 C (gcc) 和 ncurses 来制作一个程序,该程序将监视来自串行端口的数据。该程序有一个很大while
的,它读取来自端口的数据,同时在屏幕上打印该信息......
但问题就在这里:
它如何从我的键盘读取输入(因为getch()
冻结程序直到它获得输入)并同时读取来自端口的信息?
也许我必须使用另一种方式(不是大的while
),所以欢迎提出想法!
使用nodelay选项使getch成为非阻塞调用。
nodelay(stdscr,TRUE);
根据您的环境,您可能有函数 kbhit(),它只是在键盘缓冲区中达到峰值,如果那里有一个键,则返回非零 - 然后您可以执行 getch()。
(conio.h)
也许叉()?请记住,子进程在单独的进程中运行,因此变量不能在它们之间直接共享
pid_t pID = fork(); if (pID == 0) { // 孩子 // 代码只由子进程执行 // getch() ... } else if (pID < 0) { // 分叉失败 // 抛出异常 // ... } else { // 父级 // 代码只由父进程执行 // ... }
用于 cbreak()
禁用行缓冲
nodelay(win, TRUE);
这将为您提供非阻塞getch()
功能。