virtual void Run() { now = v8::base::OS::TimeCurrentMillis(); while (1) { AsyncEvent *p; std::multimap<double, AsyncEvent *>::iterator e; wait(); now = v8::base::OS::TimeCurrentMillis(); while (1) { p = s_acSleep.get(); if (p == NULL) break; s_tms.insert(std::make_pair(now + p->result(), p)); } while (1) { e = s_tms.begin(); if (e == s_tms.end()) break; if (e->first > now) break; e->second->apost(0); s_tms.erase(e); } } }
static void PASCAL Timer(unsigned int uTimerID, unsigned int uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) { AsyncEvent *p; double tm; std::multimap<double, AsyncEvent *>::iterator e; while (1) { p = s_acSleep.get(); if (p == NULL) break; tm = s_time + s_now + p->result(); s_tms.insert(std::make_pair(tm, p)); } atom_xchg(&s_now, (int)(v8::internal::OS::TimeCurrentMillis() - s_time)); while (1) { e = s_tms.begin(); if (e == s_tms.end()) break; if (e->first > s_time + s_now) break; e->second->apost(0); s_tms.erase(e); } }