我正在尝试在Lua中编写一个curses程序(主要是为了便于开发,然后将其移植到C)。它需要经常为用户发送命令做好准备,但我也希望它能够对其他信号起作用,比如定时器的到期。此示例的用途可能是闪烁指示符,如果用户花费太长时间则会唠叨用户,并打印通过网络收到的消息。
当我调用curses.getch()
时,程序在运行下一条指令之前等待它返回数据。如果在按下某个键之前发生任何其他事件,脚本将无法对其作出反应,除非采取其他措施来改变它。
我尝试使用curses.halfdelay()
让curses.getch()
在短时间后退出,以便在再次调用之前可以完成其他操作,但这会导致奇怪的错误。我也考虑过学习使用pthreads,但我不知道从哪里开始。我正在运行Linux,我不介意该解决方案是否在Windows上不起作用(因为我已经在使用curses)。
答案 0 :(得分:2)
halfdelay()
和(更常见的)nodelay()
是正确的解决方案。我可以向你保证,他们确实在一般情况下工作。您必须更加具体地了解您的错误"。
与此同时,尽管它不是纯粹的诅咒解决方案(并且不能与PDCurses一起工作),但在这种情况下,人们有时会使用select()
来等待来自的输入< / em> curses或网络套接字。