LINUX.ORG.RU

ncurses(w) — стоит ли связываться?

 


0

1

Добрый день.

Разрабатывается ПО для взаимодействия с датчиками. Крутиться будет на машине под управлением Linux. ПО должно поддерживать возможность интеррактивной работы с пользователем: в любое время пользователь может запросить состояние датчиков, которое должно, соответственно, выводиться на экран. Имена (названия) датчиков и сообщения должны быть на русском языке. Использование X и прочих графических радостей не предвидется. Поэтому — «чистое» консольное общение. Как вариант — думаю все организовать через ncurses (вернее через расширение для поддержки unicode — ncursesw). Как думаете — стоит ли связываться? В плане — оно нормально поддерживает кириллицу? Может еще есть какие варианты?

оно нормально поддерживает кириллицу?

Нормально.

Может еще есть какие варианты?

Есть всякие newt/slang... Но ncurses в этом плане надежнее.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

А как с поддержкой многопоточности? ncurses thread-safe? Скажем, будет отдельный поток для сбора данных и периодическое обновление данных в главном интерфейсе.

GreenBag ★★
() автор топика
Ответ на: комментарий от GreenBag

ncurses thread-safe?

Увы, насколько я знаю, нет.

Скажем, будет отдельный поток для сбора данных и периодическое обновление данных в главном интерфейсе.

Почему бы нет? У вас же не будет нескольких потоков с tui.

buddhist ★★★★★
()
Ответ на: комментарий от GreenBag

Если вывод во всех потоках сделать так

pthread_mutex_lock(busy_ncurses);
...чего-то вывел через ncurses
pthread_mutex_unlock(busy_ncurses);

работает

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

Да, я примерно так и подумал, спасибо. Главное чтобы куски кода, которые будут выводить через ncurses были не особо большими. Но, думаю, что тут проблем не должно быть у меня.

Кстати, параллельный вопрос: а нет ли (нет, я понимаю, что нет, но хотя бы похожее хоть чуть-чуть) в ncurses каких-нибудь event handlers, как в Qt? Скажем, произошло обновление информации — обновился интерфейс.

GreenBag ★★
() автор топика
Ответ на: комментарий от GreenBag

Какая-то начальная поддержка многопоточности в шестой версии вроде бы появилась, сделана как раз на мьютексах. Но я смог уйти от многопоточности, поэтому глубоко не копал.

Kiborg ★★★
()
Ответ на: комментарий от GreenBag

Можно и по другому сделать - в принимающих данные от железа потоках «быстро» записывать в область памяти , а в основном интерфейсном потоке «медленно» отрисовывать эти данные ncurses. Даже и более правильно делать так.

зы. Мне-то отладочный вывод в потоках нужен был в реальном времени, поэтому и «рисовалка» в потоках вызывалась.

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

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

Спасибо за идею про семафор (я не очень силен в синхронизации потоков пока, только мьютексы до этого использовал). Идея понравилась.

GreenBag ★★
() автор топика

Может еще есть какие варианты?

сделай веб морду.

anonymous
()
Ответ на: комментарий от GreenBag

в ncurses каких-нибудь event handlers, как в Qt?

Как с биндингами на С, не знаю. Но для Perl'a такое есть, когда-то писал:

my $cui = new Curses::UI( -color_support => 1, -intellidraw=>1);
$cui->set_binding( \&exit_dialog , "\cQ");
$cui->set_binding( \&add_text , KEY_ENTER());
...
$text->onFocus ( sub { } )
У каждого виджета, свои эвенты, и на них можно повесить все что угодно.

joy4eg ★★★★★
()

А кстати, интересно, libcaca умеет в юникод?

cattail
()
Ответ на: комментарий от GreenBag

каких-нибудь event handlers

заюзай libev.

anonymous
()
12 июля 2013 г.

Может еще есть какие варианты?

Есть еще вариант — Dialog: подобие интерфейса для (n)curses для прототипирования из скриптов шелла.

Infra_HDC ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.