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