我正在学习ncurses。我制作了简单的程序来处理SIGWINCH信号。
主线程显示用户界面,然后按“' q'等待用户退出程序键。
调整终端大小后,程序会处理SIGWINCH信号并再次显示UI。
当我更改终端的宽度并按' q'时,程序退出。当我改变终端的高度并按下' q'时,程序退出。但是当我改变终端的高度然后改变终端的宽度,然后我按下“q”,程序就不会退出!我需要按' q'第二次退出计划。
那么,为什么要按' q'当我改变高度和宽度时,单次没有退出我的程序?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <signal.h>
WINDOW *win1;
void paint_window(void){
int x, y;
refresh();
clear();
refresh();
getmaxyx(stdscr, y, x);
bkgd(COLOR_PAIR(1));
refresh();
win1 = newwin(3, x - 4, 1, 2);
box(win1, 0, 0);
wbkgd(win1, COLOR_PAIR(2));
wattron(win1, COLOR_PAIR(3));
mvwprintw(win1, 1, 1, "MAX X: %d, MAX Y: %d. Press 'q' to exit.", x, y);
wattroff(win1, COLOR_PAIR(3));
wrefresh(win1);
}
void sig_handler(int sig_num){
delwin(win1);
endwin();
paint_window();
}
int main(void) {
int ch;
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
curs_set(0);
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
init_pair(2, COLOR_BLACK, COLOR_WHITE);
init_pair(3, COLOR_WHITE, COLOR_RED);
paint_window();
signal(SIGWINCH, sig_handler);
while(1){
ch = getch();
if(ch == 'q' || ch == 'Q'){
delwin(win1);
endwin();
exit(EXIT_SUCCESS);
}
}
return 0;
}