Ok, mal ein kleines Konzept
Code:
//! Job (Basis-)Klasse
/*! Enthält einen Job Typ und die Daten
*/
class Job
{
};
Code:
//! Synchronisierte Übergabestruktur
/*! Die Threads und der Mainthread kommunizieren über die
JobQueue, deren Methoden intern über Locks gesichter sind.
Der Main Thread erzeugt Jobs und gibt sie in die Queue,
die Threads holen sie (bzw werden blockiert wenn keine vorhanden sind)
und geben das Resultat zurück.
*/
class JobQueue
{
public:
virtual Job* getJob() = 0;
virtual void putJob(Job* job) = 0;
virtual Job* getResult() = 0;
virtual void putResult(Job* job) = 0;
};
Code:
class Thread : public QThread
{
public:
Thread(JobQueue* queue);
};
Code:
//! Verarbeitungsmodul
/*! Spaltet eine Aufgabe in Jobs und füllt die Job Queue.
Fügt die Einzelresultate zum Endergebnis zusammen.
*/
class Processing : publc QObject, public JobQueue
{
Q_OBJECT
public:
virtual Job* getJob();
virtual void putJob(Job* job);
virtual Job* getResult();
virtual void putResult(Job* job);
//! Starts image processing
/*!
\param image image to transform
\param filter filter to apply
\return ID of the transformation Job or -1
*/
int processImage(const QImage& image, Filter filter);
signals:
void processingFinished(int id);
};
Processing::putJob würde dabei Prüfen, ob das Bild fertig ist und dann sich selbst ein Custom Signal senden.
Im Event handler dann das Signal emitten.
ciao,
_
Lesezeichen