You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
67 lines
2.0 KiB
#pragma once
|
|
#include <stdio.h>
|
|
|
|
#include <functional>
|
|
#include <list>
|
|
|
|
// #include "sdk/os/zos.hpp"
|
|
#include "osbasic_h.hpp"
|
|
#include "zos_thread.hpp"
|
|
|
|
//
|
|
namespace iflytop {
|
|
using namespace std;
|
|
|
|
class ZOSSchduler {
|
|
public:
|
|
class PeriodJob;
|
|
/*******************************************************************************
|
|
* Context *
|
|
*******************************************************************************/
|
|
class Context {
|
|
friend class ZOSSchduler;
|
|
|
|
protected:
|
|
PeriodJob* periodJob;
|
|
|
|
public:
|
|
uint32_t getScheduleTimes() { return periodJob->schedule_times; }
|
|
};
|
|
|
|
/*******************************************************************************
|
|
* PeriodJob *
|
|
*******************************************************************************/
|
|
class PeriodJob {
|
|
public:
|
|
PeriodJob(function<void(Context& context)> job, uint32_t period_ms) {
|
|
this->job = job;
|
|
this->period_ms = period_ms;
|
|
}
|
|
function<void(Context& context)> job;
|
|
uint32_t period_ms = 0;
|
|
uint32_t lastcall = 0;
|
|
uint32_t schedule_times = 0;
|
|
};
|
|
|
|
/*******************************************************************************
|
|
* PARA *
|
|
*******************************************************************************/
|
|
list<PeriodJob*> m_periodJobs;
|
|
ZOSThread m_thread;
|
|
uint32_t ticket = 0;
|
|
|
|
public:
|
|
ZOSSchduler() {}
|
|
|
|
void initialize(){};
|
|
|
|
void regPeriodJob(function<void(Context& context)> job, uint32_t period_ms);
|
|
void startSchedule(const char* threadname, int stack_size, osPriority priority);
|
|
|
|
private:
|
|
void loop();
|
|
};
|
|
|
|
// #define ZHAL_CORE_REG(period_ms, job) ZOSSchduler::getInstance()->regPeriodJob([this](ZOSSchduler::Context& context) { job }, period_ms);
|
|
|
|
} // namespace iflytop
|