void SActivityThread::processEvents() { SPostEventList postEventList; bool copyOk = true;; mPostEventListMutex.lock(); try { postEventList = mPostEventList; mPostEventList.clear(); } catch(...) { copyOk = false; } mPostEventListMutex.unlock(); if(!copyOk) { mExit = true; mRetCode = PROCESS_EVENT_ERROR; return; } SPostEventList eventHasNotHandle; STimeMS currTime = STime::getCurrentTimeMS(); for(SPostEventList::iterator it = postEventList.begin(); it != postEventList.end(); it++) { SPostEvent* pe = *it; SEvent* e = pe->event; SObject* r = pe->receiver; if(e->getTriggerTime() <= currTime) sendEvent(r, e); else eventHasNotHandle.push_back(pe); } releasePostEventList(postEventList); mPostEventListMutex.lock(); for(SPostEventList::iterator it = eventHasNotHandle.begin() ; it != eventHasNotHandle.end() ; it++) { mPostEventList.push_back(*it); } mPostEventListMutex.unlock(); }