#include "dataqueue.h" DataQueue::DataQueue(QObject *parent) : QThread(parent), stopped(false) {} DataQueue::~DataQueue(){ } void DataQueue::run() { mutex.lock(); bool stop = stopped || (requestQueue.size() == 0); mutex.unlock(); while (!stop) { mutex.lock(); if (requestQueue.size() > 0) { DataResult1D data = loader->doLoad(requestQueue.front()); resultMap.insert(std::pair(data.id, data)); emit resultReady(QString::fromStdString(data.id)); requestQueue.pop_front(); stop = requestQueue.size() == 0 || stopped; } mutex.unlock(); } } void DataQueue::requestData(const nix::DataArray &array, const nix::NDSize &count, const nix::NDSize &offset, std::string &requestId) { requestId = nix::util::createId(); DataRequest dr(requestId, array, count, offset); mutex.lock(); std::deque::iterator it; for (it = requestQueue.begin(); it < requestQueue.end(); it++) { std::cerr << it->array.id() << std::endl; if (it->array.id() == array.id()) std::cerr << "updating request" <::iterator it = resultMap.find(requestId.toStdString()); if (it != resultMap.end()) { ret = it->second; resultMap.erase(it); } mutex.unlock(); return ret; }