#include "os_default_schduler.hpp" using namespace std; using namespace iflytop; OSDefaultSchduler* OSDefaultSchduler::getInstance() { static OSDefaultSchduler instance; return &instance; } void OSDefaultSchduler::regPeriodJob(function job, uint32_t period_ms) { PeriodJob* periodJob = new PeriodJob(job, period_ms); ZASSERT(periodJob != NULL); m_periodJobs.push_back(periodJob); } void OSDefaultSchduler::loop() { static uint32_t ticket = 0; Context context; if (zos_haspassedms(ticket) < 1) { return; } ticket = zos_get_tick(); for (auto iter = m_periodJobs.begin(); iter != m_periodJobs.end(); iter++) { auto periodJob = *iter; if ((uint32_t)zos_haspassedms2(periodJob->lastcall, ticket) < periodJob->period_ms) { continue; } context.periodJob = periodJob; periodJob->lastcall = ticket; periodJob->job(context); periodJob->schedule_times++; } }