#include "conversionqueue.h" ConversionRequest::ConversionRequest(QVector *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 *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(); }