Check the return value of QFile::open()
[agianapa.git] / qt / socg / workerthread.cpp
blob09555a14460b48f95908f51a7f1106eedb29262b
1 #include <cstdlib>
2 #include <iostream>
3 #include <QDebug>
5 #include "workerthread.h"
7 WorkerThread::WorkerThread(QObject *parent)
8 : QThread(parent)
10 qDebug("WorkerThread::WorkerThread()");
12 // Initialize random generator here
13 srand(time(NULL));
15 // Make thread work forever by default
16 m_abort = false;
18 // At this point the class hasn't been fully initialized.
19 // The user must call setFileName(), before run()'ing.
22 WorkerThread::~WorkerThread()
24 qDebug("WorkerThread::~WorkerThread()");
26 m_mutex.lock();
27 m_abort = true;
28 condition.wakeOne();
29 m_mutex.unlock();
31 m_file.close();
33 wait();
36 void WorkerThread::run(void)
38 float r;
40 qDebug("WorkerThread::run()");
42 // Loop
43 while (!m_abort) {
44 m_mutex.lock();
45 if (m_data.size() >= 2007) {
46 qDebug("BLOCKED");
47 condition.wait(&m_mutex);
48 m_mutex.unlock();
50 else {
51 qDebug("Reading from file");
52 in >> r;
53 if (in.status() == QDataStream::ReadPastEnd) {
54 qDebug("Datastream has read past end");
55 m_abort = true;
56 m_mutex.unlock();
57 return;
59 m_data.enqueue(r);
60 m_mutex.unlock();
65 void WorkerThread::setFileName(QString fileName)
67 qDebug("WorkerThread::setFileName()");
69 // Close old file
70 m_file.close();
72 // Caution: discard all old data in QQueue
73 // Worst case scenario if you don't: frame read corruption
74 m_data.clear();
76 // Open new one
77 m_file.setFileName(fileName);
78 if (!m_file.open(QIODevice::ReadOnly)) {
79 qDebug("Cannot open file name: %s", fileName);
80 return;
82 in.setDevice(&m_file);
83 extractFileHeader();
86 quint32 WorkerThread::getMagicVersion(void) const
88 qDebug("WorkerThread::getMagicVersion()");
90 return m_magicVersion;
93 quint32 WorkerThread::getProtocolVersion(void) const
95 qDebug("WorkerThread::getProtocolVersion()");
97 return m_protocolVersion;
100 float WorkerThread::getDuration(void) const
102 qDebug("WorkerThread::getDuration()");
104 return m_duration;
107 quint32 WorkerThread::getNumOfRecords(void) const
109 qDebug("WorkerThread::getNumOfRecords()");
111 return m_numOfRecords;
114 void WorkerThread::extractFileHeader(void)
116 qDebug("WorkerThread::extractFileHeader()");
118 in >> m_magicVersion;
119 //Q_ASSERT(m_magicVersion == 0xA0B0C0D0);
121 in >> m_protocolVersion;
122 //Q_ASSERT(m_protocolVersion == 0x1);
124 in >> m_duration;
125 in >> m_numOfRecords;
127 // qDebug() adds an extra space between items,
128 // plus a new line in the last one.
129 qDebug() << "Magic version =" << hex << m_magicVersion;
130 qDebug() << "Protocol version =" << m_protocolVersion;
131 qDebug() << "Duration in msec = " << m_duration;
132 qDebug() << "Number of records =" << m_numOfRecords;