void Executor::executor_func(void * arg) { Executor *executor=(Executor*)arg; executor->mLog.msg("Thread executor id %llu is now alive and waiting ...\n",executor->id().value); TaskArray jobArray; while(executor->mIsRunningInternal.test_and_set()) { jobArray.clear(); executor->queue()->get(jobArray,1,true); if (!jobArray.empty()) { executor->mJobTimer.restart(); auto current = jobArray.begin(); while (current != jobArray.end()) { executor->mStats.jobsExecuted++; TaskResult::Result result=current->execute(executor->id(),InterruptPoint(&executor->mIsRunningExternal)); if(result==TaskResult::Skipped) executor->mStats.jobsSkipped++; else if (result==TaskResult::Success) executor->mStats.jobsSucesfullyExecuted++; ++current; } executor->mStats.busyMilliseconds+=executor->mJobTimer.elapsedTimeMilliseconds(); } } executor->mLog.msg("Thread executor %llu is terminating ...\n",executor->id().value); }
void cleanup_task() { TaskPtr t; while(!qu.empty()) { t=qu.front(); qu.pop(); delete t; } TaskArray::iterator it = qu_back.begin(); for(; it != qu_back.end(); ++it) { t= *it; delete t; } qu_back.clear(); tasklist.clear(); }