]> git.tdb.fi Git - builder.git/blob - source/lib/internaltask.cpp
Don't busyloop while waiting for an internal task to complete
[builder.git] / source / lib / internaltask.cpp
1 #include <msp/time/utils.h>
2 #include "internaltask.h"
3
4 using namespace Msp;
5
6 InternalTask::~InternalTask()
7 {
8         worker.join();
9 }
10
11 void InternalTask::start()
12 {
13         prepare();
14         worker.launch();
15 }
16
17 Task::Status InternalTask::check()
18 {
19         Status result = worker.get_status();
20         if(result!=RUNNING)
21                 finished(result==SUCCESS);
22         return result;
23 }
24
25 Task::Status InternalTask::wait()
26 {
27         Status result;
28         while((result = check())==RUNNING)
29                 Time::sleep(10*Time::msec);
30         return result;
31 }
32
33
34 void InternalTask::Worker::main()
35 {
36         if(func())
37                 status = Task::SUCCESS;
38         else
39                 status = Task::ERROR;
40 }