timeout
我对函数和getch
Haskell 中使用的 ncurses 库有一个奇怪的问题。当我从 GHCi 或 runhaskell 使用它们时,它们按预期工作——getch
等待给定的毫秒数,timeout
然后返回,即使没有给出输入。但是当我使用 GHC编译同一个文件时,getch
立即返回。
我为 Haskell 尝试了两个 ncurses 绑定;hscurses
:
import UI.HSCurses.Curses
main = do
initCurses
timeout 1000
c <- getch
endWin
print c
和ncurses
:
import UI.NCurses
main = do
e <- runCurses $ do
win <- defaultWindow
getEvent win $ Just 1000
print e
两者的行为方式与之前描述的相同。
我还尝试了 C 中的等效程序:
#include <ncurses.h>
int main()
{
initscr();
wtimeout(stdscr,1000);
int c = getch();
endwin();
printf("%d\n", c);
return 0;
}
这个按预期工作。
所以我的问题是:在解释和编译的 Haskell 中使用终端时会有什么不同?runhaskell 和 ghci 会修改一些微妙的终端设置吗?还是编译后的代码以不同的方式加载库?
添加:
我尝试使用 FFI 从已编译的 Haskell 中调用 C 程序,它立即返回(这是不正确的)。我认为这意味着问题不在于库,而在于 GHC 运行时的某个地方。