X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finternaltask.cpp;h=fc929ce02b2f843c2bd6de87331bbe081f11017c;hb=d1eb133ab529cdae131be7b150209f03189248f3;hp=42932034c1435d4a655182b7189f86068bf9b5fb;hpb=c06c655a1e1a3e4d60257c2916923b789c6a26b9;p=builder.git diff --git a/source/internaltask.cpp b/source/internaltask.cpp index 4293203..fc929ce 100644 --- a/source/internaltask.cpp +++ b/source/internaltask.cpp @@ -1,22 +1,36 @@ #include "internaltask.h" -InternalTask::InternalTask(Worker *w): - worker(w) -{ } - InternalTask::~InternalTask() { - delete worker; + worker.join(); +} + +void InternalTask::start() +{ + prepare(); + worker.launch(); } Task::Status InternalTask::check() { - if(worker->get_status()!=RUNNING) - signal_finished.emit(worker->get_status()==SUCCESS); - return worker->get_status(); + Status result = worker.get_status(); + if(result!=RUNNING) + signal_finished.emit(result==SUCCESS); + return result; +} + +Task::Status InternalTask::wait() +{ + Status result; + while((result = check())==RUNNING) ; + return result; } -InternalTask::Worker::Worker(): - status(RUNNING) -{ } +void InternalTask::Worker::main() +{ + if(func()) + status = Task::SUCCESS; + else + status = Task::ERROR; +}