52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#include "conversionqueue.h"
|
|
|
|
|
|
ConversionRequest::ConversionRequest(QVector<QPointF> *buffer, const DataResult1D &data)
|
|
:buffer(buffer), data(data) {}
|
|
|
|
ConversionQueue::ConversionQueue(QObject *parent)
|
|
:QThread(parent), stopped(false)
|
|
{}
|
|
|
|
ConversionQueue::~ConversionQueue(){}
|
|
|
|
void ConversionQueue::run() {
|
|
mutex.lock();
|
|
bool stop = stopped || (requestQueue.size() == 0);
|
|
mutex.unlock();
|
|
while (!stop) {
|
|
mutex.lock();
|
|
if (requestQueue.size() > 0) {
|
|
ConversionRequest r = requestQueue.front();
|
|
DataResult1D data = r.data;
|
|
double min = data.ydata[0];
|
|
double max = data.ydata[0];
|
|
for (size_t i = 0; i < data.xdata.size(); ++i) {
|
|
r.buffer->push_back({data.xdata[i], data.ydata[i]});
|
|
if (data.ydata[i] < min)
|
|
min = data.ydata[i];
|
|
if (data.ydata[i] > max)
|
|
max = data.ydata[i];
|
|
}
|
|
emit dataConverted(QString::fromStdString(r.data.entityId), min, max);
|
|
requestQueue.pop_front();
|
|
stop = requestQueue.size() == 0 || stopped;
|
|
}
|
|
mutex.unlock();
|
|
}
|
|
}
|
|
|
|
void ConversionQueue::requestConversion(QVector<QPointF> *buffer, const DataResult1D &data) {
|
|
mutex.lock();
|
|
ConversionRequest r(buffer, data);
|
|
requestQueue.push_back(r);
|
|
mutex.unlock();
|
|
start();
|
|
}
|
|
|
|
void ConversionQueue::stop() {
|
|
mutex.lock();
|
|
stopped = true;
|
|
mutex.unlock();
|
|
}
|