【问题标题】:How can I end ncurses without ending the C++ program?如何在不结束 C++ 程序的情况下结束 ncurses?
【发布时间】:2011-12-04 23:42:23
【问题描述】:

我一直在尝试制作一个 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);

【问题讨论】:

  • 我以前从未使用过 NCurses,但是您是否尝试过从命令行调用可执行文件?
  • 是的,我已经尝试过这样做(我一直都是这样做的)。
  • endwin() 应该做你想做的事。 this 对我来说很好。
  • 这不应该发生。根据文档,endwin 只是简单地恢复了终端。文档甚至声明:“在调用 initscr 之后的任何时候,都应该在退出之前调用 endwin()。”这对我来说表明exit 是一个单独的东西。
  • 什么是boxmessage?它是否恰好是或调用 ncurses 命令?因为如果你结束了 ncurses,我不希望它起作用。如果你此时只使用std::cout 会发生什么?

标签: c++ linux ncurses


【解决方案1】:

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 秒,然后恢复屏幕并打印“DONE”。

正如 cmets 中提到的,如果 boxmessage() 使用 ncurses,则在您调用 endwin() 后它将无法正常工作。

尝试在endwin() 之后添加一些创建并写入文件的代码,只是为了验证您的程序不会死在那里。

更新(近 16 个月后),引用 OP 的最新评论:

好的,我找到了错误。只是因为我做了一系列的按钮, 然后我做了'case:x'部分,我只是没有写整数 正确调用该函数。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 2019-09-20
    • 2018-08-13
    相关资源
    最近更新 更多