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
- data EventSystem
- noEvent :: EventId
- initEventSystem :: IO EventSystem
- addEvent :: EventSystem -> ClockTime -> IO () -> IO EventId
- addEventSTM :: EventSystem -> ClockTime -> IO () -> STM EventId
- cancelEvent :: EventSystem -> EventId -> IO Bool
- cancelEventSTM :: EventSystem -> EventId -> STM Bool
- evtSystemSize :: EventSystem -> STM Int
IDs useful for canceling previously scheduled events.
The event system must be initilized using initEventSystem. More than one event system can be instantiated at once (eg. for non-interference).
A value indicating there is no such event. Canceling this event returns True and has no other effect.
Add an *action* to be performed at *time* by *system*. Returns a unique ID.
Cancel an event from the system, returning True on success.