这就是上面说的
http://invisible-island.net/ncurses/ncurses.faq.html#multithread
如果您有一个程序在多个线程中使用curses,那么您几乎肯定会看到奇怪的行为。这是因为诅咒依赖于输入和输出的静态变量。使用一个线程作为输入,使用其他线程作为输出不能解决问题,额外的屏幕更新也不能帮助解决问题。本FAQ不是关于线程编程的教程。
具体来说,它提到即使输入和输出是在单独的线程上完成的,也不安全。如果我们对整个ncurses库进一步使用互斥体,以便一次最多有一个线程可以调用任何ncurses函数,这是否安全?如果不是,那么在多线程应用程序中安全使用ncurse的其他廉价解决方案是什么?
我之所以问这个问题,是因为我注意到一个真正的应用程序通常有自己的事件循环,但依赖于ncurse
getch
函数获取键盘输入。但是如果主线程在自己的事件循环中被阻塞等待,那么它就没有机会调用
格奇
. 一个看似可行的解决方案是
格奇
在另一个线程中,这还没有引起我的问题,但正如上面所说的,实际上是不安全的,并且被另一个用户验证了
here
. 所以我想知道什么是最好的合并方式
格奇
进入应用程序自己的事件循环。
我正在考虑
格奇
不阻塞并定期唤醒主线程(每10-100毫秒)以检查是否有要读取的内容。但这会在关键事件之间增加额外的延迟,从而降低应用程序的响应速度。另外,我不确定这是否会导致一些NCURES内部延迟的问题,例如
ESCDELAY
.
我正在考虑的另一个解决方案是直接轮询stdin。但我想努尔斯也应该做些类似的事情,从两个不同的地方读同一篇文章看起来很糟糕。
文本还提到了“ncursest”或“ncursestw”库,但它们似乎不太可用,例如,如果您使用的是不同语言的诅咒绑定。如果有一个标准ncurses库的可行解决方案,那就太好了。