X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finternaltask.h;h=608ea9662609bb0e5912f65a247f193f3a292504;hb=c8c51fac9453a677fc3e6932c4730f35e237af89;hp=ea25ba89eca0816751d8f13687b5e4aa5afeefd8;hpb=338eefb513953ae55e8e3614c009c242ba8ad74e;p=builder.git diff --git a/source/internaltask.h b/source/internaltask.h index ea25ba8..608ea96 100644 --- a/source/internaltask.h +++ b/source/internaltask.h @@ -1,31 +1,45 @@ #ifndef INTERNALTASK_H_ #define INTERNALTASK_H_ +#include #include #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: +private: class Worker: public Msp::Thread { - protected: - Status status; + friend class InternalTask; - Worker(); + private: + std::function func; + volatile Status status = Task::RUNNING; public: + Worker(std::function f): func(f) { } + Status get_status() const { return status; } + + private: + void main() override; }; -private: - Worker *worker; + Worker worker; public: - InternalTask(Worker *); + InternalTask(std::function f): worker(f) { } ~InternalTask(); - virtual Status check(); + std::string get_command() const override { return ""; } + void start() override; + Status check() override; + Status wait() override; }; #endif