Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
EventLoop.cpp
00001 #include "EventLoop.h" 00002 #include "rtos.h" 00003 00004 00005 EventLoop::EventLoop(osPriority priority, 00006 unsigned event_count, 00007 unsigned event_context, 00008 unsigned char *event_pointer, 00009 uint32_t stack_size, 00010 unsigned char *stack_pointer) 00011 : EventQueue(event_count, event_context, event_pointer) { 00012 _running = false; 00013 _priority = priority; 00014 _stack_size = stack_size; 00015 _stack_pointer = stack_pointer; 00016 } 00017 00018 EventLoop::EventLoop(bool start, 00019 osPriority priority, 00020 unsigned event_count, 00021 unsigned event_context, 00022 unsigned char *event_pointer, 00023 uint32_t stack_size, 00024 unsigned char *stack_pointer) 00025 : EventQueue(event_count, event_context, event_pointer) { 00026 _running = false; 00027 _priority = priority; 00028 _stack_size = stack_size; 00029 _stack_pointer = stack_pointer; 00030 00031 if (start) { 00032 EventLoop::start(); 00033 } 00034 } 00035 00036 EventLoop::~EventLoop() { 00037 stop(); 00038 } 00039 00040 osStatus EventLoop::start() { 00041 if (_running) { 00042 return osOK; 00043 } 00044 00045 _running = true; 00046 _thread = new Thread(run, this, _priority, _stack_size, _stack_pointer); 00047 if (!_thread) { 00048 return osErrorNoMemory; 00049 } 00050 00051 return osOK; 00052 } 00053 00054 osStatus EventLoop::stop() { 00055 if (!_running) { 00056 return osOK; 00057 } 00058 00059 Thread *thread = _thread; 00060 _thread = 0; 00061 00062 _running = false; 00063 while (true) { 00064 uint8_t state = thread->get_state(); 00065 if (state == Thread::Inactive || state == osErrorParameter) { 00066 break; 00067 } 00068 00069 osStatus status = Thread::yield(); 00070 if (status != osOK) { 00071 break; 00072 } 00073 } 00074 00075 delete thread; 00076 return osOK; 00077 } 00078 00079 void EventLoop::run(const void *p) { 00080 EventLoop *loop = (EventLoop *)p; 00081 00082 while (loop->_running) { 00083 loop->dispatch(0); 00084 Thread::yield(); 00085 } 00086 } 00087
Generated on Wed Jul 13 2022 19:57:07 by
1.7.2