2011-12-04 6 views
6

He intentado hacer un programa ncurses que terminará el modo ncurses en un cierto punto, y reanudar en modo terminal normal, pero manteniendo el programa en ejecución. ¿Es posible? endwin(); finaliza el programa. Aquí está mi código (no se preocupe acerca de las funciones, las hice antes):¿Cómo puedo terminar ncurses sin finalizar el programa C++?

clear(); 
refresh(); 
endwin(); 
boxmessage("STEP 1"); 
consolewrite("Removing Popularity Contest..."); 
std::vector<std::string> removepak; 
removepak.push_back("popularity-contest"); 
removepackages(removepak); 
+0

Nunca antes he usado NCurses, pero ¿ha intentado invocar el ejecutable desde la línea de comandos? – Bojangles

+0

Sí, he intentado hacer eso (así es como siempre lo hice). – MiJyn

+0

No he hecho suficientes maldiciones para saber qué tan fácil es esto, pero una posible alternativa sería permanecer * en * ncurses, pero simplemente cubrir todo el terminal con una ventana que solo hace línea, como un terminal Interacción. – dmckee

Respuesta

4

endwin() no pone fin a su programa; algo más debe estar haciendo eso.

Este programa funciona correctamente en mi sistema (Ubuntu 11.04, g ++ 4.5.2):

#include <curses.h> 
#include <unistd.h> 
#include <iostream> 
int main() { 
    initscr(); 
    mvaddstr(10, 10, "Hello, world"); 
    refresh(); 
    sleep(4); 
    endwin(); 
    std::cout << "DONE\n"; 
} 

Se borra la pantalla, imprime "Hola, mundo" en la posición esperada, capacidad para 4 segundos, a continuación, restaura la pantalla e imprime "HECHO".

Como se mencionó en los comentarios, si boxmessage() usa ncurses, no va a funcionar después de llamar al endwin().

Intente agregar un código después de endwin() que crea y escribe en un archivo, solo para verificar que su programa no muere allí mismo.

actualización (casi 16 meses después), citando comentario más reciente de la OP:

Bueno, he encontrado el error. Fue solo porque hice una serie de botones, y luego hice la parte 'case: x', y simplemente no escribí el entero que llama a la función correctamente. ¡Gracias por intentar ayudar!

Cuestiones relacionadas