hWaitForInput如何工作?

时间:2017-04-14 10:10:37

标签: haskell

这段代码从Slider获取字符并将它们转换为字符串。使用Slider实现的输入超时。我已经包含了plt.draw()函数来捕获from matplotlib import pyplot as plt from matplotlib import gridspec from matplotlib.widgets import Slider, RadioButtons # Set the grid grid = gridspec.GridSpec(2, 1, height_ratios=[1, 2]) # Plot the sliders axes_slider = plt.subplot(grid[0, 0]) slider = Slider(axes_slider, 'Channel', valmin=0, valmax=255, valinit=128) # Plot the radio buttons axes_button = plt.subplot(grid[1, 0]) button = RadioButtons(axes_button, ('Gradient', 'Channel'), active=1) plt.tight_layout(h_pad=0) plt.subplots_adjust(left=.2, right=.9) def update(_): take_gradient = True if button.value_selected == 'Gradient' else False if take_gradient: slider.valmin = -1 slider.valmax = 1 slider.val = 0 slider.label= 'Gradient' slider.valinit = 0 else: slider.valmin = 0 slider.valmax = 255 slider.val = 128 slider.label = 'Channel' slider.valinit = 128 plt.draw() # Register call-backs with widgets slider.on_changed(update) button.on_clicked(update) plt.show() 。它在程序运行时没有正确输出,因为它正在等待输入。但是,一旦输入一个角色,它就不再超时。无论输入等待时间是什么。

stdin

2 个答案:

答案 0 :(得分:1)

您使用的操作系统和GHC版本是什么?

当超时不为0时,AFAIK会重新发送return view('quarx-frontend::pages.' . $page->template)->with('page', $page)->withShortcodes(); 个版本GHC doesn't work on linux。在Windows上,整个IO子系统也是"a bit lacking"

答案 1 :(得分:0)

  

但是,一旦输入字符,它就不再超时。无论输入等待时间是什么。

这就是按照the docs的工作方式:

  

计算hWaitForInput hdl t等待直到句柄hdl上的输入可用。只要hdl上有可用输入,它将立即返回True;如果在t毫秒内没有可用输入,则返回False。

这是hWaitForInput的用法示例,它将等待五秒钟,然后检查stdin中是否有字符。如果没有,它将显示“超时已到”。否则,它将等待用户按下Enter键(hGetLine检查行尾)并打印用户输入的字符串:

main :: IO ()
main =
  hWaitForInput stdin 5000 >>= \inputIsAvailable ->
    if inputIsAvailable
      then hGetLine stdin >>= \input -> putStrLn $ "There is input: " ++ input
      else putStrLn "Timeout reached"