#include "internaltask.h"
-InternalTask::InternalTask(Worker *w):
- worker(w)
-{ }
-
InternalTask::~InternalTask()
{
- worker->join();
- delete worker;
+ worker.join();
}
void InternalTask::start()
{
- worker->launch();
+ 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;
+}