[Haskell-cafe] Suggestiong for inter-thread communication

Petr P petr.mvd at gmail.com
Sat Jan 26 11:51:56 CET 2013

  Hi Erik,

there seem to be several options. Tie simplest one is that you'll call
getEvent with some reasonable timeout in a loop and check some
communication channel an update from the calculation thread.

Probably the correct way how to handle it involves three threads:
(1) The computation thread writes its updates to a channel of type Either
Event ComputationUpdate using Right.
(2) Another thread calls getEvent repeatedly and writes received events to
the channel using Left.
(3) A consuming thread (the one for Ncurses UI) consumes the channel and
reacts both to computation updates and Ncurses events.

However, I'm not sure if Ncurses doesn't mind calling getEvent from a
different thread than the one that updates UI.

For the communication channel, I'd probably use TQueue (or TBQueue, if
there is a risk of writing values too fast).

  Best regards,
  Petr Pudlak

2013/1/26 Erik de Castro Lopo <mle+hs at mega-nerd.com>

> Hi all,
> I am in the process of writing a Haskell program consisting of two
> threads, one for performing a calculation and one for an Ncurses UI
> (haskell-ncurses).
> The calculation thread needs to feed a stream of numbers back to the
> UI thread (about 1 value per second) and the UI needs to take input
> from the user and will pass parameter changes to the calculation
> thread using an IORef and atomicModifyIORef.
> However, I'm not sure how to hande the UI thread. The UI thread would
> normally wait for Ncurses input using getEvent, but I need advice on
> how to the the data from the calculation thread.
> Any advice or things to try?
> Cheers,
> Erik
> --
> ----------------------------------------------------------------------
> Erik de Castro Lopo
> http://www.mega-nerd.com/
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130126/eaf22cb7/attachment.htm>

More information about the Haskell-Cafe mailing list