Note! This project has moved to github.com/armmbed/mbed-events
This repository has been superceded
This project has moved to mbed-events
Composable event loops combine the cheap synchronicity of event loops with the composability of preempted threads.
Two modular event queue classes are provided:
- EventLoop - for loops coupled with a c++ managed thread
- EventQueue - for manually managed event queues
The Event class takes advantage of the extensibility of FuncPtr to allow an event to be passed through APIs as a normal function.
More information on composable event loops.
EventQueue.h
- Committer:
- Christopher Haster
- Date:
- 2016-04-22
- Revision:
- 10:62767e708bb6
- Parent:
- 2:11cda6bead99
- Child:
- 14:5abf2ccf2dbf
File content as of revision 10:62767e708bb6:
/* EventQueue * * Flexible queue for managing events */ #ifndef EVENT_QUEUE_H #define EVENT_QUEUE_H #include "Timer.h" #include "Ticker.h" /** Flexible queue for managing events */ class EventQueue { public: /** Create an event queue */ EventQueue(); /** Dispatch pending events * @param ms Time to wait for events in milliseconds, * 0 indicates to return immediately if no events are pending */ void dispatch(int ms=-1); /** Get current tick of the event queue * @return Number of milliseconds since the queue was instantiated, * this count intentionally overflows to 0 after 2^32-1 */ unsigned get_tick(); private: struct event { struct event *volatile next; unsigned target; bool registered; int delay; int period; void (*callback)(void *); void *data; }; void event_register(struct event *event, int ms); void event_unregister(struct event *event); void tick(); void wakeup(); struct event *volatile _queue; unsigned _tick; mbed::Ticker _ticker; mbed::Timer _timer; template <typename F> friend class Event; }; #endif