如何在ghc-7.4中使用gtk2hs的线程?

时间:2012-02-10 20:56:49

标签: multithreading haskell gtk2hs

以下程序无法按预期运行:

module Main where

import Graphics.UI.Gtk
import Control.Monad.IO.Class (liftIO)
import Control.Concurrent (forkIO)

main = do
    unsafeInitGUIForThreadedRTS
    window <- windowNew
    windowSetDefaultSize window 200 200
    label <- labelNew (Just "Hello")
    forkIO (postGUISync (containerAdd window label))
    on window deleteEvent (liftIO mainQuit >> return True)
    widgetShowAll window
    mainGUI

标签未添加到窗口中。我用-threaded编译。我做错了吗?

1 个答案:

答案 0 :(得分:2)

我相信widgetShowAll只会在执行时显示孩子,所以如果你的containerAdd在此之后发生,它就不会出现。我建议在传递给postGUISync的操作中明确显示标签,如下所示:

forkIO (postGUISync (containerAdd window label >> widgetShow label))