control-event-0.3.0: Event scheduling system.



This module can execute events at specified time. It uses a two thread system that allows the STM adding and deleting of new threads without requiring later IO actions.

This differs from control-timeout in that control-event is: * More complex * Requires initilization * Allows pure STM adding and removing of events (no post STM IO action) * Allows user control over event systems (can have more than one) * Allows events to run in event handler thread (advisable if thread spark is too expensive / computation is cheap) * No possible duplication of EventId (theoretical! no real advantage)

A shim has been made providing control-timeout API with Control.Event running under the hood (called Control.Event.Timeout).



data EventId Source

IDs useful for canceling previously scheduled events.

data EventSystem Source

The event system must be initilized using initEventSystem. More than one event system can be instantiated at once (eg. for non-interference).

noEvent :: EventIdSource

A value indicating there is no such event. Canceling this event returns True and has no other effect.

initEventSystem :: IO EventSystemSource

The only way to get an event system is to initilize one

addEvent :: EventSystem -> ClockTime -> IO () -> IO EventIdSource

Add an *action* to be performed at *time* by *system*. Returns a unique ID.

addEventSTM :: EventSystem -> ClockTime -> IO () -> STM EventIdSource

Atomic version of addEvent

cancelEvent :: EventSystem -> EventId -> IO BoolSource

Cancel an event from the system, returning True on success.

cancelEventSTM :: EventSystem -> EventId -> STM BoolSource

Atomic version of cancelEvent

evtSystemSize :: EventSystem -> STM IntSource

Returns the number of pending events.