Совместно использовать переменную объекта пользовательского интерфейса perl curses для нескольких дочерних процессов

Я пишу инструмент, который порождает несколько дочерних процессов. На самом деле 3 уровня дочерних процессов для ускорения всей логики / процесса.

Для отображения вывода в терминале я выбрал Curses::UI. Пользовательские объекты / виджеты curses создаются на каждом уровне родительских / дочерних отношений и управляются на последнем уровне дочерних процессов. Это несколько уровней дочерних процессов, кажется, вызывает проблемы с отображением проклятий.

Я думал, что было бы стабильно, если бы я разделял только один объект curses ui во всех дочерних / родительских процессах.

Для этого я пытаюсь использовать модуль Storable/Shareable, но не могу запустить его из-за таких ошибок:

quicode sub { │ │ exit; Caused │ } вызвала ошибку: "выход" захвачен маской операции в строке 2 (eval 99), в строке 147 my_curser.pl │ подпрограмма кода {──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ выход; } вызвал ошибку: 'exit' захвачен маской операции в (eval 99) строке 2, в строке my_curser.pl 147 subode sub { │ │ exit;

Можно ли разделить проклятие пользовательского объекта по нескольким процессам?

1 ответ

curses зависит от C и состояния терминала или эмулятора терминала, которое не может быть надежно разделено между процессами даже из C, и невидимо для оболочек Perl, таких как UI::Curses, (Терминал имеет единственную "текущую позицию" / позицию курсора; подумайте, что произойдет, если разные подпроцессы попытаются одновременно обновить виджеты в разных частях экрана.) Таким образом, вы не сможете совместно использовать эти виджеты между подпроцессами,

В целом, лучший дизайн - выделять поток или процесс для пользовательского интерфейса и распространять другие аспекты обработки на другие потоки / процессы.

Другие вопросы по тегам