#include <msp/core/thread.h>
#include "task.h"
+/**
+Runs a worker thread. Tools should derive a thread class from
+InternalTask::Worker. The worker thread must set its status to either SUCCESS
+or ERROR before terminating.
+*/
class InternalTask: public Task
{
public:
class Worker: public Msp::Thread
{
+ friend class InternalTask;
+
protected:
- Status status;
+ volatile Status status = Task::RUNNING;
- Worker();
+ Worker() = default;
public:
Status get_status() const { return status; }
Worker *worker;
public:
- InternalTask(Worker *);
+ InternalTask(Worker *w): worker(w) { }
~InternalTask();
- virtual Status check();
+ std::string get_command() const override { return "<internal>"; }
+ void start() override;
+ Status check() override;
+ Status wait() override;
};
#endif