Haskell 如何通过按键盘q按钮添加代码以退出此zeromq示例

Haskell 如何通过按键盘q按钮添加代码以退出此zeromq示例,haskell,zeromq,Haskell,Zeromq,希望通过按q退出程序来终止程序 main :: IO () main = runZMQ $ do async $ clientTask "A" async $ clientTask "B" async $ clientTask "C" async serverTask liftIO $ threadDelay $ 5 * 1000 * 1000 进程间消息传递是ZeroMQ的强大功能,因此请使用它: 设计

希望通过按q退出程序来终止程序

main :: IO ()
main =
    runZMQ $ do
        async $ clientTask "A"
        async $ clientTask "B"
        async $ clientTask "C"
        async serverTask

        liftIO $ threadDelay $ 5 * 1000 * 1000
进程间消息传递是ZeroMQ的强大功能,因此请使用它:
  • 设计一个中央
    aKbdMONITOR
    -线程,用于监视键盘并扫描
    Q
  • 为该
    aKbdMONITOR
    -线程配备
    PUB
    服务,以便在此类事件出现时向任何
    子线程进行广播

  • 您必须在带有
    MVar
    的单独线程中使用软件事务性内存结构。
    MVar
    以无值开始,并在线程之间共享。在单独的线程中,阻塞直到按下
    'q'
    ,并在
    MVar
    中放置一个令牌。在您的工作线程中,如果
    MVar
    有值,您将在每个递归步骤进行轮询。您是否可以直接发布此代码,我不知道语法以及应该使用哪个库或函数。此外,如何阻止haskell中的zeropmq?我投票将这个问题作为离题题来结束,因为它表明之前没有试图解决这个问题。你可能想阅读whathaveyoutried.com,并对StackOverflow社区表示一些尊重,该社区强烈鼓励发布高质量的问题,以及MCVE(代码的最小完整可验证示例)展示您迄今为止所做的尝试。您可能希望更新您的帖子,以达到最低合理的质量水平,并展示您尊重其他StackOverflow贡献成员的意愿。他们是喜欢回答有关MCVE相关问题的好问题的专业人士。享受StackOverflow贡献成员的身份,并支持此Commu网络礼仪
    async $ clientTask "C"
    async $ aKbdMONITOR                    -- Add central-service async thread
    
    aKbdSCANNER <- socket Pub              -- PUB-side adequate ZeroMQ Archetype
    bind aKbdSCANNER "tcp://*:8123"        -- yes, can serve even for remote hosts
    
    aKbdSCANNER <- socket Sub              -- SUB-side adequate ZeroMQ Archetype
    connect aKbdSCANNER "tcp://ipKBD:8123" -- tcp transport-class remote ipKBD
    --
    -- + do not forget to subscribe
    -- + use poll to scan