diff --git a/worker/worker.cpp b/worker/worker.cpp index 507a6d1..444a2bb 100644 --- a/worker/worker.cpp +++ b/worker/worker.cpp @@ -7,8 +7,10 @@ QMutex Worker::workerLock; void Worker::queue(WorkerContext *context) { QMutexLocker ml(&lock); - context->pixmap = context->pixmap.copy(); - qqueue.enqueue(context); + _WorkerContext *c = new _WorkerContext; + c->image = context->pixmap.toImage().convertToFormat(context->targetFormat); + c->consumer = context->consumer; + qqueue.enqueue(c); } void Worker::init() { @@ -45,8 +47,8 @@ void Worker::process() { while (!ended()) { lock.lock(); if (!qqueue.isEmpty()) { - WorkerContext *c = qqueue.dequeue(); - c->consumer(c->pixmap.toImage().convertToFormat(c->targetFormat)); + _WorkerContext *c = qqueue.dequeue(); + c->consumer(c->image); } lock.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(100)); // STL likes it's scopes diff --git a/worker/worker.hpp b/worker/worker.hpp index ed7dfc5..69b3bfd 100644 --- a/worker/worker.hpp +++ b/worker/worker.hpp @@ -15,6 +15,11 @@ struct WorkerContext { std::function consumer; }; +struct _WorkerContext { + QImage image; + std::function consumer; +}; + class Worker : public QObject { Q_OBJECT public: @@ -27,7 +32,7 @@ private: QMutex lock; QMutex endLock; QThread *thr; - QQueue qqueue; // Say that ten times as fast + QQueue<_WorkerContext *> qqueue; // Say that ten times as fast bool _ended; void _queue(WorkerContext *context);