我正在使用C(gcc)和ncurses来制作一个程序来监控来自串口的数据。该程序有一个很大的while
,它读取来自端口的数据,同时,它在屏幕上打印该信息......
但问题在于:
如何从键盘读取输入,(因为getch()
冻结程序直到获得输入)并同时读取来自端口的信息?
也许我必须使用另一种方式(不是大while
),所以欢迎这些想法!
答案 0 :(得分:8)
使用 nodelay 选项使 getch 成为非阻止通话。
nodelay(stdscr,TRUE);
找到更多信息
答案 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()
功能。