Actualiser NCurses

J’exécute un petit programme ncurse, mais la sortie ne semble pas apparaître sauf si je wrefresh() la wrefresh() dans une boucle while.

Y a-t-il une mise en mémoire tampon ou autre chose? J’ai essayé d’autres fonctions de refresh dans la bibliothèque et fflush avec stddout (ce qui, à mon avis, n’a pas de sens, mais mérite un essai), mais rien ne semble fonctionner.

Une deuxième petite question: pour que getch() ne bloque pas, nous devons appeler nodelay(win,TRUE) , non?

void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); }
void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); } 

Vous n’êtes pas censé mélanger les opérations sur stdscr et les fenêtres créées avec newwin() . getch() fonctionne sur stdscr , c’est donc votre problème. Remplacer cet appel par

 wgetch(win); 

( getch() provoque le stdscr de stdscr par-dessus votre autre fenêtre, et comme cela se produit très rapidement, on dirait que l’autre fenêtre n’a jamais été affichée).

Cela fonctionne comme prévu. Cela vous permet de redessiner complètement votre prochain écran, mais seules les parties réellement modifiées sont envoyées au terminal lors de l’actualisation. Ce n’est pas un gros problème ces jours-ci, mais a fait une grande différence lorsque les connexions terminales étaient relativement lentes.