/* * lftp - file transfer program * * Copyright (c) 1996-2013 by Alexander V. Lukyanov (lav@yars.free.net) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef TIMER_H #define TIMER_H #include "SMTask.h" #include "ResMgr.h" #include "xlist.h" #include "xheap.h" class Timer { Time start; Time stop; TimeInterval last_setting; double random_max; xstring_c resource; xstring_c closure; static int infty_count; static xlist_head all_timers; xlist all_timers_node; static xheap running_timers; xheap::node running_timers_node; void re_sort(); void re_set(); void add_random(); void set_last_setting(const TimeInterval &); void init(); void reconfig(const char *); public: Timer(); ~Timer(); Timer(int s,int ms=0); Timer(const TimeInterval &); Timer(const char *,const char *); bool Stopped() const; void Stop() { stop=SMTask::now; re_sort(); } void Set(const TimeInterval&); void Set(time_t s,int ms=0) { Set(TimeInterval(s,ms)); } void SetMilliSeconds(int ms) { Set(TimeInterval(0,ms)); } void SetMicroSeconds(int us) { Set(TimeInterval(0,0,us)); } void SetResource(const char *,const char *); void AddRandom(double r); void Reset(const Time &t); void Reset() { Reset(SMTask::now); } void Reset(const Timer &t) { Reset(t.GetStartTime()); } void ResetDelayed(int s); void StopDelayed(int s); const TimeInterval& GetLastSetting() const { return last_setting; } TimeDiff TimePassed() const { return SMTask::now-start; } TimeInterval TimeLeft() const; bool IsInfty() const { return last_setting.IsInfty(); } const Time &GetStartTime() const { return start; } static timeval GetTimeoutTV(); static void ReconfigAll(const char *); }; bool operator<(const Timer& a,const Timer& b); #endif