Note! This project has moved to github.com/armmbed/mbed-events

Dependents:   SimpleHTTPExample

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.

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;
 };