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:
20:2f9d9c53a5af
Parent:
17:6d564266850e
--- a/EventQueue.cpp	Mon Apr 18 12:59:37 2016 -0500
+++ b/EventQueue.cpp	Mon Apr 18 13:22:21 2016 -0500
@@ -17,18 +17,26 @@
 
 
 // Event queue definitions
-EventQueue::EventQueue(unsigned event_count, unsigned event_context) {
+EventQueue::EventQueue(unsigned event_count,
+                       unsigned event_context, 
+                       unsigned char *event_pointer) {
     _event_context = sizeof(FuncPtr<void()>) + event_context;
     unsigned event_size = sizeof(struct event) + _event_context;
-    _mem = malloc(event_count * event_size);
-    _free = (struct event*)_mem;
 
-    if (_mem) {
+    if (!event_pointer) {
+        _mem = malloc(event_count * event_size);
+        _free = (struct event*)_mem;
+    } else {
+        _mem = 0;
+        _free = (struct event*)event_pointer;
+    }
+
+    if (_free) {
         for (unsigned i = 0; i < event_count-1; i++) {
-            ((struct event*)((char*)_mem + i*event_size))->next =
-                    (struct event*)((char*)_mem + (i+1)*event_size);
+            ((struct event*)((char*)_free + i*event_size))->next =
+                    (struct event*)((char*)_free + (i+1)*event_size);
         }
-        ((struct event*)((char*)_mem + (event_count-1)*event_size))->next = 0;
+        ((struct event*)((char*)_free + (event_count-1)*event_size))->next = 0;
     }
 
     _queue = 0;