QXRD  0.11.16
qxrdfilesaverthread.cpp
Go to the documentation of this file.
1 #include "qxrddebug.h"
2 #include "qxrdfilesaverthread.h"
3 
4 #include "qxrdfilesaver.h"
5 #include "qxrdacquisition.h"
6 #include "qcepintegrateddata.h"
7 #include "qxrdapplication.h"
8 #include "qcepmutexlocker.h"
9 
11  : QxrdThread(),
12  m_FileSaver(),
13  m_Allocator()
14 {
16  printf("QxrdFileSaverThread::QxrdFileSaverThread(%p)\n", this);
17  }
18 
19  qRegisterMetaType<QcepDoubleImageDataPtr>("QcepDoubleImageDataPtr");
20  qRegisterMetaType<QcepInt32ImageDataPtr>("QcepInt32ImageDataPtr");
21  qRegisterMetaType<QcepInt16ImageDataPtr>("QcepInt16ImageDataPtr");
22  qRegisterMetaType<QcepMaskDataPtr>("QcepMaskDataPtr");
23  qRegisterMetaType<QcepIntegratedDataPtr>("QcepIntegratedDataPtr");
24  qRegisterMetaType<FILE*>("FILE*");
25  qRegisterMetaType< QVector<double> >("QVector<double>");
26 
27  m_Allocator = allocator;
28 
29  setObjectName("fileSaver");
30 }
31 
33 {
34  shutdown();
35 
37  printf("QxrdFileSaverThread::~QxrdFileSaverThread(%p)\n", this);
38  }
39 }
40 
42 {
43  if (qcepDebug(DEBUG_THREADS)) {
44  printf("File Saver Thread Started\n");
45  }
46 
48 
49  m_Mutex.lock();
50  m_FileSaver = res;
51  m_Mutex.unlock();
52 
53  int rc = exec();
54 
55  {
56  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
57 
59  }
60 
61  if (qcepDebug(DEBUG_THREADS)) {
62  printf("File Saver Thread Terminated with rc %d\n", rc);
63  }
64 }
65 
67 {
68  exit();
69 
70  wait();
71 }
72 
74 {
75  while (isRunning()) {
76  {
77  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
78 
79  if (m_FileSaver) return m_FileSaver;
80  }
81 
82  QThread::msleep(50);
83  }
84 
85  return QxrdFileSaverPtr();
86 }
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QxrdFileSaverThread(QcepAllocatorWPtr acq)
QcepAllocatorWPtr m_Allocator
QWeakPointer< QcepAllocator > QcepAllocatorWPtr
QMutex m_Mutex
Definition: qcepthread.h:17
QSharedPointer< QxrdFileSaver > QxrdFileSaverPtr
QxrdFileSaverPtr m_FileSaver
QxrdFileSaverPtr fileSaver() const