#ifndef NATIVE_TIMER_H #define NATIVE_TIMER_H #include #include #include #include #include "constant.h" class NativeTimer : public QObject { Q_OBJECT private: QSet *deletedTimerIds = new QSet(); QJSEngine* engine; public: NativeTimer(QJSEngine* engine, QObject *parent = nullptr) : QObject(parent) { this->engine = engine; } Q_INVOKABLE void setTimer(long timerId, int time, bool repeat) { QTimer* timer = new QTimer(this); timer->setSingleShot(!repeat); connect(timer, &QTimer::timeout, this, [=] () { if (deletedTimerIds->contains(timerId)) { deletedTimerIds->remove(timerId); delete timer; } else { engine->evaluate( Constant::GLOBAL_DORIC + "." + Constant::DORIC_TIMER_CALLBACK + "(" + QString::number(timerId) + ")" ); if (!repeat) { deletedTimerIds->remove(timerId); delete timer; } } }); timer->start(time); } Q_INVOKABLE void clearTimer(long timerId) { deletedTimerIds->insert(timerId); } }; #endif // NATIVE_TIMER_H