36 void print(std::ostream &os)
const override;
48 theHandler(aHandler), theArg(anArg), isLockedArg(lockedArg)
55 theHandler(d.theHandler), theArg(d.theArg), isLockedArg(d.isLockedArg)
75 return call.
cancel(
"stale handler data");
89ev_entry::ev_entry(
char const * aName,
EVH * aFunction,
void * aArgument,
double evWhen,
int aWeight,
bool haveArg) :
114eventAddIsh(
const char *name,
EVH * func,
void *arg,
double delta_ish,
int weight)
116 if (delta_ish >= 3.0) {
118 auto third = (delta_ish/3.0);
119 std::uniform_real_distribution<> thirdIsh(delta_ish - third, delta_ish + third);
120 delta_ish = thirdIsh(rng);
123 eventAdd(name, func, arg, delta_ish, weight);
166 for (
E = &
tasks; (
event = *
E) !=
nullptr;
E = &(*E)->
next) {
167 if (event->
func != func)
170 if (arg && event->
arg != arg)
209 const int timeLeft =
static_cast<int>(ceil(1000*diff));
211 const int minDelay = 1;
212 return max(minDelay, timeLeft);
228 EventDialer(event->func, event->arg, event->cbdata));
232 const bool heavy =
event->weight &&
244 }
while (result == 0);
266 out->
appendf(
"%-25s\t%-15s\t%s\t%s\n",
273 out->
appendf(
"%-25s\t%0.3f sec\t%5d\t %s\n",
285 for (event =
tasks;
event !=
nullptr;
event =
event->
next) {
286 if (event->
func == func && event->
arg == arg)
305 const double timestamp = when > 0.0 ?
current_dtime + when : 0;
309 debugs(41, 7,
"schedule: Adding '" << name <<
"', in " << when <<
" seconds");
313 if ((*E)->when > event->when)
#define ScheduleCallHere(call)
RefCount< AsyncCallT< Dialer > > asyncCall(int aDebugSection, int aDebugLevel, const char *aName, const Dialer &aDialer)
std::mt19937::result_type RandomSeed32()
int cbdataReferenceValid(const void *p)
#define cbdataReferenceDone(var)
#define cbdataReference(var)
bool cancel(const char *reason)
EventDialer(EVH *aHandler, void *anArg, bool lockedArg)
virtual bool canDial(AsyncCall &call)
void print(std::ostream &os) const override
static EventScheduler * GetInstance()
bool find(EVH *func, void *arg)
void schedule(const char *name, EVH *func, void *arg, double when, int weight, bool cbdata=true)
static EventScheduler _instance
void cancel(EVH *func, void *arg)
int timeRemaining() const
int checkEvents(int timeout) override
~EventScheduler() override
void appendf(const char *fmt,...) PRINTF_FORMAT_ARG2
Append operation with printf-style arguments.
ev_entry(char const *name, EVH *func, void *arg, double when, int weight, bool cbdata=true)
A const & max(A const &lhs, A const &rhs)
#define debugs(SECTION, LEVEL, CONTENT)
void eventAddIsh(const char *name, EVH *func, void *arg, double delta_ish, int weight)
int eventFind(EVH *func, void *arg)
static const char * last_event_ran
void eventDelete(EVH *func, void *arg)
void eventAdd(const char *name, EVH *func, void *arg, double when, int weight, bool cbdata)
void RegisterAction(char const *action, char const *desc, OBJH *handler, Protected, Atomic, Format)
double current_dtime
the current UNIX time in seconds (with microsecond precision)