2011-12-04 3 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()가 프로그램을 종료하지 않습니다; 다른 것이 그렇게해야합니다.

이 프로그램은 내 시스템에서 제대로 작동합니다 (우분투 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 초 동안 자고, 인쇄 "안녕, 세계"예상 위치에서 화면을 지 웁니다 화면을 복원하고 "완료"를 인쇄합니다.

의견에서 언급 한 것처럼 boxmessage()이 ncurses를 사용하는 경우 endwin()을 호출 한 후에는 작동하지 않습니다.

endwin() 뒤에 파일을 만들고 쓰는 코드를 추가하여 프로그램이 바로 죽지 않는지 확인하십시오. 영업의 가장 최근의 코멘트를 인용

업데이트 (거의 16개월 이상) :

OK, 나는 버그를 발견했다. 그냥 일련의 버튼을 만들었 기 때문에 을 입력 한 다음 'case : x'부분을 수행하고 함수를 올바르게 호출하는 정수인 을 작성하지 않았습니다. 도움을 주셔서 감사합니다!

관련 문제