这个demo可以一边中期性地处理业务一边跟用交互。其中doWork()函数表示程序业务,interaction()函数负责跟用户交互,它确保在用户按下键盘的时候,程序会有相应。按下q键程序会结束。
这里假设dowork()内的工作用时是很短的,对用户来说可以忽略不计。
要保证在用户按下键盘按键时程序立即能够接收到,而不需要再按回车键,需要对终端属性进行一些修改,参考:linux下的getch模拟(无回显读取字符)
代码如下:
#include<stdio.h>
#include<string.h>
#include<sys/time.h>
#include<stdlib.h>
#include<termios.h>
int goOn = 1;
void doWork(){
printf("---------I am working....\n");
}
void interaction(int delay){//delay seconds
// 修改终端属性,保证按键被立即接收
struct termios save, current;
tcgetattr(0, &save);
current = save;
current.c_lflag &= ~ICANON;
current.c_lflag &= ~ECHO;
current.c_cc[VMIN] = 1;
current.c_cc[VTIME] = 0