EHS/include/ehs/Task.h

51 lines
747 B
C
Raw Normal View History

2024-01-31 22:28:19 -08:00
#pragma once
#include "EHS.h"
#include "BaseObj.h"
#include "ehs/system/Thread.h"
#include "ehs/system/Semaphore.h"
namespace ehs
{
typedef void (*TaskCb)(Serializer<UInt_64>*);
class Task
{
private:
bool working;
Semaphore* available;
Semaphore* done;
Serializer<UInt_64>** cbArgs;
TaskCb* callback;
Serializer<UInt_64>* threadArgs;
Thread thread;
public:
~Task();
Task();
Task(Task&& task) noexcept;
Task(const Task& task);
Task& operator=(Task&& task) noexcept;
Task& operator=(const Task& task);
void Revalidate();
void Initialize();
void Release();
bool IsWorking() const;
void GiveWork(Serializer<UInt_64> args, TaskCb cb);
void WaitUntilDone();
bool IsValid() const;
};
}