Haskell存在Windows中的一个bug,似乎在GHC9中通过WinIO已经修复:getChar忽略了NoBuffering模式 - 直到按下Enter才会执行。
它有点起作用,但问题是似乎会阻塞控制台输出直到按下某个键,而我正在从不同的线程并发读取按键和写入控制台。请帮忙找到一种在 Windows 上使用 GHC 8.8.x(或至少是 8.10.x)无需缓冲和回显且不会阻止控制台输出读取字符/按键的方法(例如编写外部函数调用-很遗憾,我对此不太了解)。谢谢!(理想情况下,我需要跨平台的方法,但我可以通过条件编译来实现,因此如果仅在 Windows 上可行也可以。上述外部调用已经不跨平台)。
有人建议通过外部调用来解决这个问题:
{-# LANGUAGE ForeignFunctionInterface #-}
import Data.Char
import Foreign.C.Types
getHiddenChar = fmap (chr.fromEnum) c_getch
foreign import ccall unsafe "conio.h getch"
c_getch :: IO CInt
它有点起作用,但问题是似乎会阻塞控制台输出直到按下某个键,而我正在从不同的线程并发读取按键和写入控制台。请帮忙找到一种在 Windows 上使用 GHC 8.8.x(或至少是 8.10.x)无需缓冲和回显且不会阻止控制台输出读取字符/按键的方法(例如编写外部函数调用-很遗憾,我对此不太了解)。谢谢!(理想情况下,我需要跨平台的方法,但我可以通过条件编译来实现,因此如果仅在 Windows 上可行也可以。上述外部调用已经不跨平台)。