packages feed

caf-0.0.2: Examples/Example01.hs

module Control.Concurrent.Futures.Example01 where
import qualified Control.Concurrent.Futures.Buffer as Buffer
import qualified Control.Concurrent.Futures.Futures as Futures
import Control.Concurrent

-- local finals
oneSecond = 1000000

-- | Producer Consumer example with buffers demonstrating 'Futures.withFuturesDo'.
bufferExampleF:: IO ()
bufferExampleF = Futures.withFuturesDo bufferExample

-- | Producer Consumer example with buffers.
bufferExample :: IO ()
bufferExample = do
 putStrLn $ "Producer-Consumer example with buffers"
 b <- Buffer.newBuf
 Control.Concurrent.forkIO $ (writeBufferThread b)
 Control.Concurrent.forkIO $ (readBufferThread b)
 Control.Concurrent.threadDelay $ 10 * oneSecond

writeBufferThread b = do
 Buffer.putBuf b 1
 Buffer.putBuf b 2
 Control.Concurrent.threadDelay oneSecond
 Buffer.putBuf b 3

readBufferThread b = do 
 val <- Buffer.getBuf b
 putStrLn $ "read: " ++ show val
 Control.Concurrent.threadDelay oneSecond
 readBufferThread b