Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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();
}