event/Loop: add attribute "again"
Improved support for added events.
This commit is contained in:
parent
6268955778
commit
e9d764d7ad
@ -79,6 +79,7 @@ EventLoop::AddIdle(IdleMonitor &i)
|
|||||||
assert(std::find(idle.begin(), idle.end(), &i) == idle.end());
|
assert(std::find(idle.begin(), idle.end(), &i) == idle.end());
|
||||||
|
|
||||||
idle.push_back(&i);
|
idle.push_back(&i);
|
||||||
|
again = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -98,6 +99,7 @@ EventLoop::AddTimer(TimeoutMonitor &t, unsigned ms)
|
|||||||
assert(IsInside());
|
assert(IsInside());
|
||||||
|
|
||||||
timers.insert(TimerRecord(t, now_ms + ms));
|
timers.insert(TimerRecord(t, now_ms + ms));
|
||||||
|
again = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -123,6 +125,7 @@ EventLoop::Run()
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
now_ms = ::MonotonicClockMS();
|
now_ms = ::MonotonicClockMS();
|
||||||
|
again = false;
|
||||||
|
|
||||||
/* invoke timers */
|
/* invoke timers */
|
||||||
|
|
||||||
@ -149,7 +152,6 @@ EventLoop::Run()
|
|||||||
|
|
||||||
/* invoke idle */
|
/* invoke idle */
|
||||||
|
|
||||||
const bool idle_empty = idle.empty();
|
|
||||||
while (!idle.empty()) {
|
while (!idle.empty()) {
|
||||||
IdleMonitor &m = *idle.front();
|
IdleMonitor &m = *idle.front();
|
||||||
idle.pop_front();
|
idle.pop_front();
|
||||||
@ -159,7 +161,7 @@ EventLoop::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!idle_empty)
|
if (again)
|
||||||
/* re-evaluate timers because one of the
|
/* re-evaluate timers because one of the
|
||||||
IdleMonitors may have added a new
|
IdleMonitors may have added a new
|
||||||
timeout */
|
timeout */
|
||||||
|
@ -84,6 +84,12 @@ class EventLoop final : SocketMonitor
|
|||||||
|
|
||||||
bool quit;
|
bool quit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True when the object has been modified and another check is
|
||||||
|
* necessary before going to sleep via PollGroup::ReadEvents().
|
||||||
|
*/
|
||||||
|
bool again;
|
||||||
|
|
||||||
PollGroup poll_group;
|
PollGroup poll_group;
|
||||||
PollResult poll_result;
|
PollResult poll_result;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user