我在Haskell中创建基本的东西时遇到了困难。
我正在尝试创建新线程并在屏幕上写入内容,睡眠,然后在屏幕上写下其他内容。
我想我应该使用forkIO,但我不确定如何构造语句。
提前感谢任何可以提供帮助的人
答案 0 :(得分:5)
首先:您的想法是正确的 - 您可以使用forkIO
执行此操作 - 您可以使用的功能让您的线程暂时休眠threadDelay
(您必须使用 micro < / em>秒! - 通常只有 milli 秒,所以要注意)
最简单的方法是将forkIO
权限嵌入到您的计算中(main
此处) - 这是一个快速的代码段,可以按照您的要求执行:
module Main where
import Control.Concurrent
main :: IO ()
main = do
putStrLn "press Enter to exit the program"
threadId <- forkIO $ do
putStrLn "Something"
threadDelay 5000000 -- wait 5 seconds
putStrLn "Something Else"
_ <- getLine
return ()
如果使用-threaded
编译它:
ghc Main.hs -threaded
如果要打印第一行,则等待5秒。最后打印第二行。
getLine
是一个糟糕的勒芒等待线程 - 所以你必须按 结束程序(没有这个会有没有输出,因为程序以主线程结束)threadId
是您启动的主题的ThreadId
- 查看Control.Concurrent
module以查看与该也许你不想把它放在main
里面 - 如果是这样你也可以重构它(这可能会产生更清晰的代码):
main :: IO ()
main = do
putStrLn "press Enter to exit the program"
threadId <- forkIO myThreadComputation
_ <- getLine
return ()
myThreadComputation :: IO ()
myThreadComputation = do
putStrLn "Something"
threadDelay 5000000 -- wait 5 seconds
putStrLn "Something Else"