在Haskell中,waitForProcess在Windows';命令提示符

在Haskell中,waitForProcess在Windows';命令提示符,windows,haskell,interrupt-handling,Windows,Haskell,Interrupt Handling,我尝试在Windows的cmd.exe中运行以下Haskell程序,在执行waitForProcess时,按ctrl-c并不会终止该程序。但如果在MinGW shell下运行,它会工作。有什么想法吗? (注意:Windows没有“睡眠”命令,我只是自己写了一个。) {-#语言重载字符串} 导入系统。进程 主要∷ IO() main=do putStrLn“睡眠” (,,,,pHandle)系统sheduller在等待内核对象的事件时没有时间处理线程。 解决方案是从另一个线程调用waitForPr

我尝试在Windows的cmd.exe中运行以下Haskell程序,在执行waitForProcess时,按ctrl-c并不会终止该程序。但如果在MinGW shell下运行,它会工作。有什么想法吗? (注意:Windows没有“睡眠”命令,我只是自己写了一个。)

{-#语言重载字符串}
导入系统。进程
主要∷ IO()
main=do
putStrLn“睡眠”

(,,,,pHandle)系统sheduller在等待内核对象的事件时没有时间处理线程。

解决方案是从另一个线程调用waitForProcess,与主线程不同。

这似乎是mingw和cygwin如何处理控制台的问题:


cmd.exe的睡眠工作正常运行以上代码为我!Ctrl+C也终止了!常见任务的更简单的函数记录在。

如果使用
线程化的
构建会发生什么?同样的行为,我应该在前面提到过。
{-# Language OverloadedStrings #-}
import System.Process

main ∷ IO ()
main = do
  putStrLn "sleeping"
  (_, _, _, pHandle) <-
    createProcess CreateProcess { 
          cmdspec = RawCommand "sleep" ["5"]
        , cwd = Nothing
        , env = Nothing
        , std_in = CreatePipe, std_out = CreatePipe, std_err = CreatePipe
        , close_fds = False
        , create_group = False
        } 
  waitForProcess pHandle
  putStrLn "all done"
module Main where

import System.Process

main = do callCommand "sleep 5"
       putStrLn "all done"