Subversion Repositories HomeAutomation

Rev

Rev 1317 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1309 runge 1
/*
2
 * Thread.cpp
3
 *
4
 *  Created on: Apr 26, 2009
5
 *      Author: Mattias Runge
6
 */
7
 
8
#include "Thread.h"
9
 
10
using namespace std;
11
 
12
namespace atom {
1317 runge 13
namespace thread {
1309 runge 14
 
15
Thread::Thread()
16
{
1403 runge 17
    this->is_running_ = false;
1309 runge 18
}
19
 
20
Thread::~Thread()
21
{
22
    //cout << "Thread destroy" << endl;
1403 runge 23
    this->Stop();
1309 runge 24
}
25
 
1403 runge 26
void Thread::Start()
1309 runge 27
{
1403 runge 28
    if (!this->is_running_)
1309 runge 29
    {
1403 runge 30
        boost::thread localThread(boost::bind(&Thread::RunBase, this));
31
        this->thread_ = localThread.move();
32
        this->is_running_ = true;
1309 runge 33
    }
34
}
35
 
1403 runge 36
void Thread::Stop()
1309 runge 37
{
1403 runge 38
    this->thread_.interrupt();
39
    this->thread_.join();
40
    this->is_running_ = false;
1309 runge 41
}
42
 
1403 runge 43
boost::thread::id Thread::GetId()
1309 runge 44
{
1403 runge 45
    return this->thread_.get_id();
1309 runge 46
}
47
 
1403 runge 48
bool Thread::IsRunning()
1309 runge 49
{
1403 runge 50
    return this->is_running_;
1309 runge 51
}
52
 
1403 runge 53
void Thread::RunBase()
1309 runge 54
{
1403 runge 55
    this->is_running_ = true;
56
    this->Run();
57
    this->is_running_ = false;
1309 runge 58
}
59
 
1403 runge 60
} // namespace thread
61
} // namespace atom