BOOL CBypassQueue::BatchWorker(BITEM *pItem) { int nMaxWorker = MIN(GetMaxWorker(), 10); BOOL bOk = FALSE; if(GetActiveWorker() < nMaxWorker) { if(StartWorker(WorkerJob, (void *)pItem)) { bOk = TRUE; } } return bOk; }
int Client::OnRun() { int i; switch(m_sendType) { case STRESS_TEST: switch(m_workMode) { case THREADS: for (i = 0; i < m_stressWorkers; i++) { if (m_message.empty()) StartWorker(THREADS); else StartWorker(THREADS, m_message); } break; case EVENTS: for (i = 0; i < m_stressWorkers; i++) { if (m_message.empty()) StartWorker(EVENTS); else StartWorker(EVENTS, m_message); } break; default: for (i = 0; i < m_stressWorkers; i++) { if (m_message.empty()) StartWorker(i % 5 == 0 ? THREADS : EVENTS); else StartWorker(i % 5 == 0 ? THREADS : EVENTS, m_message); } break; } break; case SEND_MESSAGE: StartWorker(m_workMode,m_message); break; case SEND_RANDOM: StartWorker(m_workMode); break; } mTimer.Start(timeout_val,true); return wxApp::OnRun(); }
void CMeterReader::MeterReaderWorker() { int nIndex; int nState; long sleeptime=1000000; long magic=1; METERITEM * pItem; METERINGJOB *pJob = NULL; nState = codiGetState(GetCoordinator()); if (nState != CODISTATE_NORMAL) { XDEBUG("METERING: Coordinator is not ready\r\n"); return; } while(TRUE) { usleep(sleeptime/magic); magic = 1; m_Locker.Lock(); pItem = m_List.GetHead(); if (pItem) m_List.RemoveAt((POSITION)pItem->nPosition); m_Locker.Unlock(); if (pItem == NULL) break; magic = 10; for(;(GetActiveWorker() > 0) || (pItem != NULL);) { if ((GetActiveWorker() < m_nMeteringThreadCount) && (pItem != NULL)) { nIndex = GetActiveWorker(); if (nIndex != -1) { pJob = (METERINGJOB *)MALLOC(sizeof(METERINGJOB)); if (pJob != NULL) { memset(pJob, 0, sizeof(METERINGJOB)); memcpy(&pJob->id, &pItem->id, sizeof(EUI64)); pJob->nOption = pItem->nOption; pJob->nOffset = pItem->nOffset; pJob->nCount = pItem->nCount; FREE(pItem); if (StartWorker(WorkerJob, (void *)pJob)) { m_Locker.Lock(); pItem = m_List.GetHead(); if (pItem) m_List.RemoveAt((POSITION)pItem->nPosition); m_Locker.Unlock(); } } } } usleep(100000); } } }