2011-12-04 21 views
6

私は特定の時点でncursesモードを終了し、通常のターミナルモードで再開しながらプログラムを実行し続けるncursesプログラムを作成しようとしています。 可能ですか? endwin();がプログラムを終了します。 はここに私のコードです(私は前にそれらを作った、機能については心配しないでください):C++プログラムを終了させずにncursesを終了するにはどうしたらいいですか?

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

以前はNCursesを使ったことがありませんでしたが、コマンドラインから実行可能ファイルを呼び出そうとしましたか? – Bojangles

+0

はい、私はそれをやってみました(それは私がいつもそれをした方法です)。 – MiJyn

+0

私はこれがどれほど簡単かを知るには十分な呪いをしていませんが、可能な別の方法は* ncursesにとどまることですが、端末全体を単純にラインワイズな端末で覆うことですインタラクション。 – dmckee

答えて

4

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"; 
} 

はその後、4秒間スリープ、版画の "Hello、world" の予想位置に画面をクリアします画面を復元して「完了」を表示します。

コメントに記載されているように、boxmessage()がncursesを使用している場合は、endwin()に電話をかけても機能しません。

ファイルを作成して書き込むendwin()の後にいくつかのコードを追加して、プログラムがそこで正しく消滅しないことを確認してください。

更新は(ほぼ16ヶ月後)、OPの最も最近のコメント引用:

[OK]を、私はバグを発見しました。それはちょうど私が一連のボタンを作ったからで、 私は 'case:x'部分を行い、ちょうど関数を正しく呼び出す整数 を書きませんでした。助けてくれてありがとう!

関連する問題