首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell Gloss和STM并发集成

Haskell Gloss和STM并发集成
EN

Stack Overflow用户
提问于 2019-01-11 06:47:15
回答 1查看 130关注 0票数 1

我想从多个线程(4个线程)更新一个。我正在研究一个应用程序,在这个应用程序中,Haskell上的一个事件触发一系列步骤,最终创建线程,如果需要,每个线程都可以并且应该更改Gloss。我使用的是光泽play函数。

Gloss函数类型的play

代码语言:javascript
复制
play
  :: Display
     -> Color
     -> Int
     -> world
     -> (world -> Picture)
     -> (Event -> world -> world)
     -> (Float -> world -> world)
     -> IO ()

注意参数(Event -> world -> world),它是处理键盘事件的函数。

如果我单击键盘上的x,那么handleKeys::Event -> world -> world捕获这个event,获取一个world(应用程序的一个模型,它是一个由Gloss显示的数据结构),并返回一个world,不管更改与否。

根据handleKeys::Event -> world -> world处理的事件,可以使用forkIO :: IO () -> IO ThreadId生成其他线程。这些生成的线程还应该操作world并返回一个world以供显示。也就是说,每个线程运行一个类型为world->world的函数。然后,我将使用STM原语进行并发。这些原语是:

代码语言:javascript
复制
    putTMVar :: TMVar a -> a -> STM ()
    takeMVar :: MVar a -> IO a
    atomically :: STM a -> IO a
    retry :: STM a
    orElse :: STM a -> STM a -> STM a

你已经猜到了,Haskell型检查器让我偏头痛。是否有可能在不违反类型的情况下运行依赖STM并发性的Gloss应用程序来更新GUI?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-13 01:37:45

您应该使用来自Graphics.Gloss.Interface.IO.Game的Graphics.Gloss.Interface.IO.Game

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54141611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档