QImage Berechnung in einem Thread
Verfasst: 10. Januar 2011 18:33
Ich wollte die Berechnung meines Bildes in einen Thread packen, da diese relativ zeitaufwändig ist. In der run()-Funktion wird ein Signal geworfen das mein Bild dann an die behinhaltende Klasse senden soll.
Das Ganze passiert immer dann wenn, ich über eine Funktion die Variablen m_iMin, m_iMax ändere. Allerdings scheint das Programm immer dann abzustürzen, wenn diese geändert werden, bevor die Berechnung eines Bildes abgeschlossen ist. Ich habe mal die Dateien mit der auskommentierten QThread-Klasse angehangen. Im Header sind zwei Entwürfe, die obere ist die aktuelle die auch zur Implementation passt. Es wäre schön, wenn man die Bildberechnung in einen Thread packen könnte.
Das Ganze passiert immer dann wenn, ich über eine Funktion die Variablen m_iMin, m_iMax ändere. Allerdings scheint das Programm immer dann abzustürzen, wenn diese geändert werden, bevor die Berechnung eines Bildes abgeschlossen ist. Ich habe mal die Dateien mit der auskommentierten QThread-Klasse angehangen. Im Header sind zwei Entwürfe, die obere ist die aktuelle die auch zur Implementation passt. Es wäre schön, wenn man die Bildberechnung in einen Thread packen könnte.
Code: Alles auswählen
void DisplayThread::run() {
while(true) {
m_pParent->slChangeConfig(m_iMin, m_iMax );
QImage m_pImage = QImage( (const uchar *)m_pParent->GetImg()->imageData,
m_pParent->GetImg()->width,
m_pParent->GetImg()->height,
QImage::Format_RGB888);
QString NrColLbl = QString::number(m_pParent->GetNrColonies()) + " surfaces";
emit ImageProcessed(m_pImage, NrColLbl);
mutex.lock();
condition.wait(&mutex);
mutex.unlock();
}
}Code: Alles auswählen
void DisplayThread::SetConfig(int iMin, int iMax) {
QMutexLocker locker(&mutex);
m_iMin = iMin;
m_iMax = iMax;
if (!isRunning()) {
start(LowPriority);
} else {
restart = true;
condition.wakeOne();
}
}