mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
52 lines
759 B
C++
52 lines
759 B
C++
|
#include "stdafx.h"
|
||
|
#include "JobWorker.h"
|
||
|
#include <thread>
|
||
|
|
||
|
namespace Jobs
|
||
|
{
|
||
|
JobWorker::JobWorker()
|
||
|
: JobWorker(nullptr, 0)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
JobWorker::JobWorker(JobManager* Manager, uint32_t WorkerId)
|
||
|
: _Running(false), _Manager(Manager), _WorkerId(WorkerId), _Executing(false)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void JobWorker::Run()
|
||
|
{
|
||
|
_Running = true;
|
||
|
while (_Running)
|
||
|
this->TryRunTask();
|
||
|
}
|
||
|
|
||
|
void JobWorker::Stop()
|
||
|
{
|
||
|
_Running = false;
|
||
|
}
|
||
|
|
||
|
bool JobWorker::IsExecuting()
|
||
|
{
|
||
|
return (this->_Executing == true);
|
||
|
}
|
||
|
|
||
|
void JobWorker::TryRunTask()
|
||
|
{
|
||
|
auto Job = GetJob();
|
||
|
if (Job != nullptr)
|
||
|
{
|
||
|
this->_Executing = true;
|
||
|
Job->Execute();
|
||
|
|
||
|
if (!Job->IsAwaiter())
|
||
|
delete Job;
|
||
|
this->_Executing = false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
std::this_thread::yield();
|
||
|
}
|
||
|
}
|
||
|
}
|