Created
December 30, 2011 14:08
-
-
Save huangdongxu/1540018 to your computer and use it in GitHub Desktop.
message_pump_loop.cpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void MessagePumpDefault::Run(Delegate* delegate) { | |
DCHECK(keep_running_) << "Quit must have been called outside of Run!"; | |
for (;;) { | |
mac::ScopedNSAutoreleasePool autorelease_pool; | |
bool did_work = delegate->DoWork(); | |
if (!keep_running_) | |
break; | |
did_work |= delegate->DoDelayedWork(&delayed_work_time_); | |
if (!keep_running_) | |
break; | |
if (did_work) | |
continue; | |
did_work = delegate->DoIdleWork(); | |
if (!keep_running_) | |
break; | |
if (did_work) | |
continue; | |
if (delayed_work_time_.is_null()) { | |
event_.Wait(); | |
} else { | |
TimeDelta delay = delayed_work_time_ - TimeTicks::Now(); | |
if (delay > TimeDelta()) { | |
event_.TimedWait(delay); | |
} else { | |
// It looks like delayed_work_time_ indicates a time in the past, so we | |
// need to call DoDelayedWork now. | |
delayed_work_time_ = TimeTicks(); | |
} | |
} | |
// Since event_ is auto-reset, we don't need to do anything special here | |
// other than service each delegate method. | |
} | |
keep_running_ = true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment