diff --git a/src/bakatools/thread/task_timer.h b/src/bakatools/thread/task_timer.h new file mode 100644 index 0000000..ac8419d --- /dev/null +++ b/src/bakatools/thread/task_timer.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include + +template +class TaskTimer +{ + public: + TaskTimer(TimeSpan

ts) + : ts(ts) {} + ~TaskTimer() { if (running) stop(); } + + void start(std::unique_ptr> action) + { + if(running) stop(); + running = true; + worker = std::thread([this](std::unique_ptr> action) + { + std::function& task = *action; + while(running) + { + std::this_thread::sleep_for(ts.interval); + task(); + } + }, std::move(action)); + } + + void stop() + { + running = false; + worker.join(); + } + + private: + bool running = false; + std::thread worker; + TimeSpan

ts; +}; \ No newline at end of file