Timer: add

This commit is contained in:
Vaxry 2024-02-20 00:59:35 +00:00
parent 13124c6a96
commit 12da91b9ca
2 changed files with 48 additions and 0 deletions

25
src/core/Timer.cpp Normal file
View file

@ -0,0 +1,25 @@
#include "Timer.hpp"
CTimer::CTimer(std::chrono::system_clock::duration timeout, std::function<void(std::shared_ptr<CTimer> self, void* data)> cb_, void* data_) : cb(cb_), data(data_) {
expires = std::chrono::system_clock::now() + timeout;
}
bool CTimer::passed() {
return std::chrono::system_clock::now() > expires;
}
void CTimer::cancel() {
wasCancelled = true;
}
bool CTimer::cancelled() {
return wasCancelled;
}
void CTimer::call(std::shared_ptr<CTimer> self) {
cb(self, data);
}
float CTimer::leftMs() {
return std::chrono::duration_cast<std::chrono::milliseconds>(expires - std::chrono::system_clock::now()).count();
}

23
src/core/Timer.hpp Normal file
View file

@ -0,0 +1,23 @@
#pragma once
#include <chrono>
#include <functional>
class CTimer {
public:
CTimer(std::chrono::system_clock::duration timeout, std::function<void(std::shared_ptr<CTimer> self, void* data)> cb_, void* data_);
void cancel();
bool passed();
float leftMs();
bool cancelled();
void call(std::shared_ptr<CTimer> self);
private:
std::function<void(std::shared_ptr<CTimer> self, void* data)> cb;
void* data = nullptr;
std::chrono::system_clock::time_point expires;
bool wasCancelled = false;
};