parent
230f52df85
commit
78ac0ca45e
1 changed files with 39 additions and 0 deletions
@ -0,0 +1,39 @@ |
||||
#pragma once |
||||
|
||||
#include <bakatools.h> |
||||
#include <bakatools/time/time.h> |
||||
|
||||
template<typename P> |
||||
class TaskTimer
|
||||
{ |
||||
public: |
||||
TaskTimer(TimeSpan<P> ts) |
||||
: ts(ts) {} |
||||
~TaskTimer() { if (running) stop(); } |
||||
|
||||
void start(std::unique_ptr<std::function<void()>> action) |
||||
{ |
||||
if(running) stop(); |
||||
running = true; |
||||
worker = std::thread([this](std::unique_ptr<std::function<void()>> action) |
||||
{ |
||||
std::function<void()>& 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<P> ts; |
||||
}; |
Loading…
Reference in New Issue