如何防止 curses 应用程序出现故障?
How to prevent glitches appear in curses app?
我正在 Python 中使用 curses 开发应用程序。应用程序启动后几秒钟,一些故障随机出现。
起初我以为是因为tmux和$TERM
变量,但它被设置为screen-256
。 运行 tmux 之外的应用程序也会导致这种故障。
这里是初始化的代码curses screen
这个例子是这样做的:
import curses
from threading import Thread
class Screen(object):
def __init__(self):
self.maxx = None
self.maxy = None
self.run()
暗示您的应用程序可以有多个线程写入屏幕。但是 curses 通常不是线程安全的,因此您最终会使用它们的线程 - 以及其他线程 - 全局或静态变量的值。它不会很好地工作。
如果您想在多线程应用程序中使用 curses,您必须确保只有一个线程使用 curses,或者(可能)编译您自己的副本ncurses 库的一部分,它对可重入代码提供基本支持,并在 that 配置的约束下工作。
进一步阅读:
- Why does (fill in the blank) happen when I use two threads?(ncurses 常见问题解答)
我正在 Python 中使用 curses 开发应用程序。应用程序启动后几秒钟,一些故障随机出现。
起初我以为是因为tmux和$TERM
变量,但它被设置为screen-256
。 运行 tmux 之外的应用程序也会导致这种故障。
这里是初始化的代码curses screen
这个例子是这样做的:
import curses
from threading import Thread
class Screen(object):
def __init__(self):
self.maxx = None
self.maxy = None
self.run()
暗示您的应用程序可以有多个线程写入屏幕。但是 curses 通常不是线程安全的,因此您最终会使用它们的线程 - 以及其他线程 - 全局或静态变量的值。它不会很好地工作。
如果您想在多线程应用程序中使用 curses,您必须确保只有一个线程使用 curses,或者(可能)编译您自己的副本ncurses 库的一部分,它对可重入代码提供基本支持,并在 that 配置的约束下工作。
进一步阅读:
- Why does (fill in the blank) happen when I use two threads?(ncurses 常见问题解答)