share perl curses跨多个子进程的UI对象变量

时间:2012-04-24 06:29:38

标签: curses

我正在编写一个产生多个子进程的工具。事实上,3个级别的子进程可以加速整个逻辑/进程。

要在终端显示输出,我选择了Curses :: UI。 curses ui对象/小部件是在父级/子级关系的每个级别创建的,并在最后一级子进程中进行操作。这种多级子进程似乎导致了curses显示的问题。

如果我在所有子/父进程中只共享一个curses ui对象,我认为它会稳定。

为了实现这种共享,我尝试使用Storable / Shareable模块但由于这些错误而无法运行它:

quicode sub {│ │退出; │ │}导致错误:'退出'被(eval 99)第2行的操作掩码捕获,位于my_curser.pl第147行 代码子{──────────────────────────────────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────── ────────────────────────────────────────────────── ───────────────────────────────┘     出口; 导致错误:'退出'在(eval 99)第2行,在my_curser.pl第147行被操作掩码捕获 │odesub{│ │退出;

是否可以跨多个过程共享curses ui对象?

1 个答案:

答案 0 :(得分:0)

curses依赖于C和终端或终端仿真器状态,即使从C进程也无法在进程之间可靠地共享,并且对UI::Curses等Perl包装器不可见。 (终端具有单个“当前位置”/光标位置;考虑如果不同的子进程同时尝试更新显示器的不同部分中的小部件会发生什么。)因此,您无法在子进程之间共享这些小部件

通常,更好的设计是将一个线程或进程专用于UI,并将处理的其他方面分配给其他线程/进程。