GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — ArduinoThread/ThreadController.cpp at master · ivanseidel/ArduinoThread Expand file tree/ Copy pathThreadController.cppMore file actions 114 lines (95 loc) · 2.03 KB / Copy pathThreadController.cppFile metadata and controls114 lines (95 loc) · 2.03 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 #include "Thread.h" #include "ThreadController.h" ThreadController::ThreadController(unsigned long _interval): Thread(){ cached_size = 0; clear(); setInterval(_interval); #ifdef USE_THREAD_NAMES // Overrides name ThreadName = "ThreadController "; ThreadName = ThreadName + ThreadID; #endif } /* ThreadController run() (cool stuf) */ void ThreadController::run(){ // Run this thread before if(_onRun != NULL) _onRun(); unsigned long time = millis(); int checks = 0; for(int i = 0; i < MAX_THREADS && checks < cached_size; i++){ // Object exists? Is enabled? Timeout exceeded? if(thread[i]){ checks++; if(thread[i]->shouldRun(time)){ thread[i]->run(); } } } // ThreadController extends Thread, so we should flag as runned thread runned(); } /* List controller (boring part) */ bool ThreadController::add(Thread* _thread){ // Check if the Thread already exists on the array for(int i = 0; i < MAX_THREADS; i++){ if(thread[i] != NULL && thread[i]->ThreadID == _thread->ThreadID) return true; } // Find an empty slot for(int i = 0; i < MAX_THREADS; i++){ if(!thread[i]){ // Found a empty slot, now add Thread thread[i] = _thread; cached_size++; return true; } } // Array is full return false; } void ThreadController::remove(int id){ // Find Threads with the id, and removes for(int i = 0; i < MAX_THREADS; i++){ if(thread[i]->ThreadID == id){ thread[i] = NULL; cached_size--; return; } } } void ThreadController::remove(Thread* _thread){ remove(_thread->ThreadID); } void ThreadController::clear(){ for(int i = 0; i < MAX_THREADS; i++){ thread[i] = NULL; } cached_size = 0; } int ThreadController::size(bool cached){ if(cached) return cached_size; int size = 0; for(int i = 0; i < MAX_THREADS; i++){ if(thread[i]) size++; } cached_size = size; return cached_size; } Thread* ThreadController::get(int index){ int pos = -1; for(int i = 0; i < MAX_THREADS; i++){ if(thread[i] != NULL){ pos++; if(pos == index) return thread[i]; } } return NULL; } |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |