void ReleaseVectors() { Switch* p; while (stdSwitches.pop_back(p)) SafeDelete(p); while (ourSwitches.pop_back(p)) SafeDelete(p); };
void CRunQueue::ProcessRunQueue() { #ifdef _DEBUG // We run in self thread if (mb_InExecution) { _ASSERTE(!mb_InExecution); } #endif // Block adding new requests from other threads MArray<RunQueueItem> Stack; MSectionLockSimple cs; cs.Lock(mpcs_QueueLock); RunQueueItem item = {}; while (m_RunQueue.pop_back(item)) { //item = m_RunQueue[0]; //m_RunQueue.erase(0); Stack.push_back(item); } cs.Unlock(); DWORD nCurDelay, nWaitExtra; bool bOpt; // And process stack while (!mb_Terminate && Stack.pop_back(item)) { if (!gpConEmu->isValid(item.pVCon)) continue; CVConGuard VCon(item.pVCon); if (!VCon.VCon()) continue; // Avoid too fast process creation? if (mn_LastExecutionTick) { nCurDelay = (GetTickCount() - mn_LastExecutionTick); if (nCurDelay < RUNQUEUE_CREATE_LAG) { nWaitExtra = (RUNQUEUE_CREATE_LAG - nCurDelay); Sleep(nWaitExtra); } } mb_InExecution = true; bOpt = gpConEmu->ExecuteProcessPrepare(); VCon->RCon()->OnStartProcessAllowed(); gpConEmu->ExecuteProcessFinished(bOpt); mb_InExecution = false; // Remember last execution moment mn_LastExecutionTick = GetTickCount(); } }