#ifndef WORKER_HPP #define WORKER_HPP #include #include #include #include #include #include #include struct WorkerContext { QPixmap pixmap; QImage::Format targetFormat; std::function consumer; }; struct _WorkerContext { QImage image; QImage::Format targetFormat; std::function consumer; WorkerContext *underlyingThing; }; class Worker : public QObject { Q_OBJECT public: static void queue(WorkerContext *context); static void init(); private: Worker(); ~Worker(); static QMutex lock; QMutex endLock; QThread *thr; QQueue<_WorkerContext *> qqueue; // Say that ten times as fast bool _ended; void _end(); void _queue(WorkerContext *context); bool ended(); static Worker *inst; static QMutex workerLock; signals: void error(QString err); void finished(); public slots: void process(); static void end(); }; #endif // WORKER_HPP