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.
Diff: EventLoop.h
- Revision:
- 14:5abf2ccf2dbf
- Parent:
- 11:6721568592e5
- Child:
- 16:ff5d48fcce1b
--- a/EventLoop.h Fri Apr 22 22:32:35 2016 -0500 +++ b/EventLoop.h Tue May 10 07:51:44 2016 -0500 @@ -14,12 +14,27 @@ class EventLoop : public EventQueue { public: /** Create an event loop without starting execution + * @param priority Initial priority of the thread + * (default: osPriorityNormal) + * @param event_count Number of events to allow enqueueing at once + * @param event_context Max size of arguments passed with an event + * @param stack_size Stack size (in bytes) requirements for the thread + * (default: DEFAULT_STACK_SIZE) + * @param stack_pointer Pointer to stack area to be used by the thread + * (default: NULL) */ - EventLoop(); + EventLoop(osPriority priority=osPriorityNormal, + unsigned event_count=32, + unsigned event_context=0, + uint32_t stack_size=DEFAULT_STACK_SIZE, + unsigned char *stack_pointer=NULL); /** Create an event loop running in a dedicated thread + * @param start True to start on construction * @param priority Initial priority of the thread * (default: osPriorityNormal) + * @param event_count Number of events to allow enqueueing at once + * @param event_context Max size of arguments passed with an event * @param stack_size Stack size (in bytes) requirements for the thread * (default: DEFAULT_STACK_SIZE) * @param stack_pointer Pointer to stack area to be used by the thread @@ -27,24 +42,18 @@ */ EventLoop(bool start, osPriority priority=osPriorityNormal, + unsigned event_count=32, + unsigned event_context=0, uint32_t stack_size=DEFAULT_STACK_SIZE, unsigned char *stack_pointer=NULL); /** Clean up event loop */ - ~EventLoop(); + virtual ~EventLoop(); /** Starts an event loop running in a dedicated thread - * @param priority Initial priority of the thread - * (default: osPriorityNormal) - * @param stack_size Stack size (in bytes) requirements for the thread - * (default: DEFAULT_STACK_SIZE) - * @param stack_pointer Pointer to stack area to be used by the thread - * (default: NULL) */ - void start(osPriority priority=osPriorityNormal, - uint32_t stack_size=DEFAULT_STACK_SIZE, - unsigned char *stack_pointer=NULL); + void start(); /** Stops an event loop cleanly, waiting for any currently executing events */ @@ -54,6 +63,9 @@ static void run(const void *p); bool _running; + osPriority _priority; + uint32_t _stack_size; + unsigned char *_stack_pointer; rtos::Thread *_thread; };