Здравствуйте, дорогой Communauts,NCurses не восстанавливает поведение терминала
Я создаю отчет о терминальном анимированном состоянии для параллельного программного обеспечения, которое я разрабатываю. Я использую NCurses. У меня возникла проблема, связанная с восстановлением стандартного поведения терминала. После запуска моего программного обеспечения терминал имеет только 24 строки, независимо от того, вызываю ли я endwin(), или нет. Вот упрощенный код:
int size=10;
initscr();
refresh();
while(KeepAlive){
int j=1;
mvprintw(j,0,/*Blah blah header*/));
for(int i=0;i<size;i++){
j++;
mvprintw(j,0,/*Some blah blah*/);
}
refresh();
usleep(1000000);
}
endwin();
KeepAlive является управляющим переменной изменена другого потока (таким образом, в то время как не бесконечный цикл, но контролируемая петли). После запуска этого программного обеспечения мой терминал имеет только 24 строки, работает эхо, но есть много свободного места.
Большое спасибо за вашу помощь, получать удовольствие
EDIT:
Я хотел бы поделиться с вами информацией, я нашел, пытаясь решить мою проблему:
- проклятия (Ncurses) отлично работает под openMP, тогда вы можете представить, что некоторые потоки выполняют ваши математические вычисления и один поток (только один, обратите внимание), выдавая некоторую информацию о времени выполнения.
- проклятие (ncurses) НЕ совместимо с MPI. Ну, правильная формулировка будет «не полностью» совместима с MPI. MPI действительно сложный в отношении stdin/stdout/stderr, поскольку все выходы из всех MPI-процессов могут быть перенаправлены на дисплей (который может быть указан). Использование любой расширенной библиотеки вывода с превышением вывода приведет к ошибке кода или неожиданному поведению.
, который поддерживается Справка MPI:
Может быть. Но, вероятно, нет.
Открытый MPI обеспечивает довольно сложную пересылку stdin/stdout/stderr. > Тем не менее, это не работает с проклятиями, ncurses, readline или другими сложными пакетами ввода-вывода, которые обычно требуют прямого управления терминалом.
Каждая библиотека приложений и ввода-вывода отличается - вы должны попытаться проверить, поддерживается ли ваша. Но, скорее всего, это не сработает.
Извините. :-(
найдено here (MPI reference).
То, что я обнаружил, что даже если вы назначить только один MPI-процесс управления все выходные проклятия (только этот процесс вызывает initscr() в начале и endwin() в конце его части кода) нет никакого способа заставить проклятия использовать полный терминал (только UNIX 24x80 по умолчанию будет доступен). После завершения MPI весь ваш терминал будет работать в режиме 24x80 до тех пор, пока
Спасибо всем, кто помог мне,
весело провести время
GF
Спасибо за ваш совет. Я не могу понять, что вы подразумеваете для части первой точки вашего ответа. Должен ли я использовать пару терминалов для вызова одной из них вычислительной части, а во втором - монитора? – jetstream
NVM нашел здесь еще один ответ на ваш http://stackoverflow.com/questions/15007164/can-mpi-publish-name-be-used-for-two-separately-started-applications – jetstream