我正在使用 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()功能。