void* JobPoolWorker::Entry() { #ifdef LINUX XInitThreads(); #endif while ( true ) { // Did we get a request to terminate? if (TestDestroy()) break; Job *job = GetJob(); if (job) { // Call user's implementation for processing request ProcessJob(job); delete job; job = NULL; } else { wxMutexLocker mutLock(*lock); if (idleThreads > 5) { break; } } } wxMutexLocker mutLock(*lock); numThreads--; return NULL; }
void* JobPoolWorker::Entry() { #ifdef LINUX XInitThreads(); #endif while ( !stopped ) { // Did we get a request to terminate? if (TestDestroy()) break; Job *job = GetJob(); if (job) { // Call user's implementation for processing request ProcessJob(job); if (job->DeleteWhenComplete()) { delete job; } job = NULL; } else { std::unique_lock<std::mutex> mutLock(*lock); if (idleThreads > 5) { break; } } } std::unique_lock<std::mutex> mutLock(*lock); numThreads--; return NULL; }
///===================================================== /// ///===================================================== void JobManager::Update(){ if (m_threads.empty()){ ProcessJob(ThreadType::AnyType); } Job* completedJob; while (m_finishedJobs.Dequeue(&completedJob)){ FATAL_ASSERT(completedJob->m_callback != nullptr); completedJob->m_callback(completedJob->m_callbackArgs); delete completedJob; } }
int CAsyncApiWorker::WorkerThread() { while(true) { ::WaitForSingleObject(hStartEvt_, INFINITE); while(CAsyncApiJob* job = GetNextJob()) { ProcessJob(job); } r3dCSHolder cs1(csJobs_); if(jobs_.size() == 0 && needToExit_) { r3dOutToLog("CAsyncApiWorker %d finished\n", idx_); return 0; } } }
uint32 FSimplygonRESTClient::Run() { while (SwarmTask->GetState() != SRS_ASSETDOWNLOADED) { switch (SwarmTask->GetState()) { case SRS_UNKNOWN: UploadAsset(TEXT("UE4_TEST"), SwarmTask->ZipFilePath); break; case SRS_FAILED: return 0; break; case SRS_ASSETUPLOADED: CreateJob(TEXT("UE4_TEST"), SwarmTask->InputAssetId); break; case SRS_JOBCREATED: UploadJobSettings(SwarmTask->JobId, SwarmTask->SplFilePath); break; case SRS_JOBSETTINGSUPLOADED: ProcessJob(SwarmTask->JobId); break; case SRS_JOBPROCESSING: GetJob(SwarmTask->JobId); break; case SRS_JOBPROCESSED: DownloadAsset(SwarmTask->OutputAssetId); break; case SRS_ASSETDOWNLOADED: break; } if (SwarmTask->GetState() == SRS_FAILED) { break; } FPlatformProcess::Sleep(0.5); } return 0; }