Как я могу завершить ncurses без завершения программы C ++? - PullRequest
6 голосов
/ 05 декабря 2011

Я пытался создать программу ncurses, которая в определенный момент завершит режим ncurses и продолжит работу в обычном режиме терминала, но все еще продолжит работу программы.Является ли это возможным?endwin(); завершает программу.Вот мой код (не беспокойтесь о функциях, я делал их раньше):

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

1 Ответ

4 голосов
/ 05 декабря 2011

endwin() не прерывает вашу программу;что-то еще должно быть так.

Эта программа корректно работает в моей системе (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";
}

Она очищает экран, печатает «Hello, world»в ожидаемой позиции, спит в течение 4 секунд, затем восстанавливает экран и печатает «ВЫПОЛНЕНО».

Как упоминалось в комментариях, если boxmessage() использует ncurses, он не будет работать после вызова endwin().

Попробуйте добавить после endwin() некоторый код, который создает и записывает файл, просто чтобы убедиться, что ваша программа не умирает прямо здесь.

Обновление (спустя почти 16 месяцев), цитируя самый последний комментарий ОП:

ОК, я нашел ошибку.Это было только потому, что я сделал серию кнопок, затем я сделал часть 'case: x', и я просто не написал целое число, которое правильно вызывает функцию.Спасибо за попытку помочь!

...