//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #ifndef FRAMEWORK_TIMER_MQH #define FRAMEWORK_TIMER_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class timer_t : public disposable_obj { private: int _interval_in_sec; datetime _start; string _timer_name; public: timer_t() { reset(); } void reset() { _start = layer::time_current(); } void set_zero() { _start = _start - _interval_in_sec; } bool is_elapsed() { return get_distance() >= _interval_in_sec; } int get_distance() { return time_get_distance_in_sec(layer::time_current(), _start); } datetime ent_time() { return _start + _interval_in_sec; } static timer_t *create(int interval_in_sec, const string name="") { return timer_t::create(layer::time_current(), interval_in_sec, name); } static timer_t *create(datetime start, int interval_in_sec, const string name) { timer_t *result = new timer_t(); result._start = start; result._interval_in_sec = interval_in_sec; result._timer_name = name; result.save_state(); return result; } static timer_t *restore(string name) { double val=0; if(tool_global_var::get(name,val)) { if((datetime)val<=layer::time_current()) { tool_global_var::del(name); return NULL; } } else return NULL; int interval=time_get_distance_in_sec((long)val,layer::time_current()); return timer_t::create(interval, name); } bool save_state() { if(ent_time()>layer::time_current() && StringLen(_timer_name)>0) { return tool_global_var::set(_timer_name,ent_time()); } return true; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int time_get_distance_in_sec(datetime end, datetime start) { return (int)(end - start); } #endif //+------------------------------------------------------------------+