Diana Software
pkg
threadwrapper
QBaseThreadHandler.cc
Go to the documentation of this file.
1
#include "
QBaseThreadHandler.hh
"
2
3
#include "
QError.hh
"
4
#include "
QBaseThread.hh
"
5
6
#include <boost/thread.hpp>
7
8
//_____________________________________________________________________________
9
QBaseThreadHandler::QBaseThreadHandler
():
10
fControlFlag(0),
11
fErr(NULL),
12
fThread(NULL)
13
{
14
fErr
=
new
QError
(
QERR_SUCCESS
);
15
}
16
17
//_____________________________________________________________________________
18
QBaseThreadHandler::~QBaseThreadHandler
()
19
{
20
Stop
();
21
delete
fErr
;
22
}
23
24
25
//_____________________________________________________________________________
26
QError
QBaseThreadHandler::Check
(
bool
& isRunning)
27
{
28
return
Check
(isRunning, 10);
29
}
30
31
//_____________________________________________________________________________
32
QError
QBaseThreadHandler::Check
(
bool
& isRunning,
int
timeoutMillisec)
33
{
34
isRunning =
false
;
35
if
(NULL ==
fThread
)
36
return
QERR_SUCCESS
;
37
38
isRunning
39
= !(
fThread
->timed_join(boost::posix_time::millisec(timeoutMillisec)));
40
if
(!isRunning)
41
{
42
delete
fThread
;
43
fThread
= NULL;
44
}
45
46
return
*
fErr
;
47
}
48
49
50
//_____________________________________________________________________________
51
QError
QBaseThreadHandler::Stop
()
52
{
53
fControlFlag
= 1;
54
bool
isRunning =
true
;
55
int
ctr = 100;
56
while
(isRunning && ctr--)
57
{
58
QError
err
=
Check
(isRunning);
59
if
(
err
!=
QERR_SUCCESS
)
60
return
err
;
61
}
62
if
(isRunning)
63
return
QError
(
QERR_UNDEFINED_STATUS
, __FILE__, __LINE__,
64
"thread failed to stop"
);
65
66
delete
fThread
;
67
fThread
= NULL;
68
return
QERR_SUCCESS
;
69
}
err
err
Definition:
CheckOF.C:114
QBaseThreadHandler.hh
QBaseThread.hh
QError.hh
QERR_UNDEFINED_STATUS
@ QERR_UNDEFINED_STATUS
Definition:
QError.hh:51
QERR_SUCCESS
@ QERR_SUCCESS
Definition:
QError.hh:27
QBaseThreadHandler::fThread
boost::thread * fThread
Definition:
QBaseThreadHandler.hh:28
QBaseThreadHandler::fErr
QError * fErr
Definition:
QBaseThreadHandler.hh:27
QBaseThreadHandler::QBaseThreadHandler
QBaseThreadHandler()
Definition:
QBaseThreadHandler.cc:9
QBaseThreadHandler::~QBaseThreadHandler
virtual ~QBaseThreadHandler()
Definition:
QBaseThreadHandler.cc:18
QBaseThreadHandler::fControlFlag
int fControlFlag
Definition:
QBaseThreadHandler.hh:26
QBaseThreadHandler::Stop
QError Stop()
Definition:
QBaseThreadHandler.cc:51
QBaseThreadHandler::Check
QError Check(bool &isRunning)
Definition:
QBaseThreadHandler.cc:26
QError
error class with error type and description
Definition:
QError.hh:115
Generated by
1.9.1