void cancel(Fn_0<void> *fn) { if(!fn) return; Ttask *t; for(t=timer_tasks.next;t;t=t->link.next) if(t->fn==fn) break; if(t) { t->fn->cancel(); t->fn=0; timer_tasks.deque(t); delete t; } }
void note(int usecs) { Ttask *t; for(t=timer_tasks.next;t;t=t->link.next) if(t->usecs>0) { t->usecs-=usecs; } while (!timer_tasks.empty() && timer_tasks.next->usecs<=0) { t=timer_tasks.next; timer_tasks.deque(t); t->fn->cont(t->fn); delete t; } }
Port::~Port() { ports.deque(this); }