Diana Software
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 //_____________________________________________________________________________
10  fControlFlag(0),
11  fErr(NULL),
12  fThread(NULL)
13 {
14  fErr = new QError(QERR_SUCCESS);
15 }
16 
17 //_____________________________________________________________________________
19 {
20  Stop();
21  delete fErr;
22 }
23 
24 
25 //_____________________________________________________________________________
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 //_____________________________________________________________________________
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
Definition: CheckOF.C:114
@ QERR_UNDEFINED_STATUS
Definition: QError.hh:51
@ QERR_SUCCESS
Definition: QError.hh:27
boost::thread * fThread
QError Check(bool &isRunning)
error class with error type and description
Definition: QError.hh:115