#define INFINITE 0 /** Pseudo codigo para estudo da classe de alarme class Alarm { private: unsigned int t; unsigned int f; unsigned int e; boolean canceled; public: static const Relative_Queue queue = Relative_Queue(); static const Chronometer chron = Chronometer(); Alarm(unsignet int expiration, unsigned int function, unsigned int times=1) { e = expiration; t = times; f = function; insereNaFila(this); } void delete() { queue.search(this).cancel(true); } void cancel(boolean cancel) { canceled = cancel; } void recebeInterrupcao() { do { Alarm alarme = queue.remove().object(); if (!alarme.canceled) { chamaFuncao(alarme.f); } if (alarme.object().t != 1) { if(alarme.t > 1) --alarme.t; insereNaFila(alarme); } while(Element head = queue.head().order() == 0); Mediator.chama(head.order()); chron.reset(); } private: void chamaFuncao(unsigned int function) { asm("rjump function"); } void insereNaFila(Alarm a) { chron.stop(); Element head = queue.head(); head.order(head.order() - chron.read()); queue.insert(a, a.e); head = queue.head(); Mediator.chama(head.order()); chron.reset(); chron.start(); } };