]> git.tdb.fi Git - builder.git/blobdiff - source/internaltask.h
Inline simple constructors
[builder.git] / source / internaltask.h
index ea25ba89eca0816751d8f13687b5e4aa5afeefd8..59545192a5bc82b130820d1e5b9bf05f0e94edc7 100644 (file)
@@ -4,15 +4,22 @@
 #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; }
@@ -22,10 +29,13 @@ private:
        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