Seite 1 von 1

Probleme bei Zugriff auf Member-Variable eines Threads

Verfasst: 14. September 2010 14:12
von KartoffelKiffer
Hallo,

ich habe eine Schleife, die eine Integer-Membervariable inkrementiert. Den Wert dieser Variable würde ich gerne in der GUI anzeigen. Die Schleife läuft in einem eigenen Worker-Thread, um die GUI nicht zu blockieren.

Nun möchte ich nicht bei jedem Hochzählen den Wert anzeigen, sondern periodisch, etwa alle zwei Sekunden.

Temporär - nicht lauffähig - habe ich es wiefolgt gelöst:

Code: Alles auswählen

	QTimer *timer = new QTimer(this);
	connect(timer, SIGNAL(timeout()), this, SLOT(UpdateCounterPeriodically()));
	timer->setInterval(2000);
	timer->start(1);

void MyThread::UpdateCounterPeriodically()
{
	emit UpdateCounter(m_BoardCounter);
}
Den oberen Teil rufe ich in der run-Methode der Thread-Klasse auf. Entsprechend meckert der Compiler folgendes
QObject: Cannot create children for a parent that is in a different thread.
(Parent is MyThread(00AB4568), parent's thread is QThread(003F7658), current thread is MyThread(00AB4568)
Kann ich es nun irgendwie lösen, dass ich eine aus dem Thread - bzw. aus der run-Methode - veränderte Variable periodisch an einen anderen Thread übermitteln kann?



Gruß, KK

Verfasst: 14. September 2010 14:19
von padreigh
Signal/Slot und Threads kommt irgendwie immer wieder ....

http://doc.qt.nokia.com/4.6/threads-qob ... ss-threads

Verfasst: 15. September 2010 13:22
von MartinS
Der Fehler kommt aber nicht von Signal / Slots:

Das Problem liegt in folgender Zeile:

Code: Alles auswählen

QTimer *timer = new QTimer(this);
Wenn das in run aufgerufen wird, dann wird das Objekt "timer" im Thread erzeugt. Der Parent "this", also das QThread Objekt lebt aber im Main Thread, wodurch es dann zu der Fehlermeldung kommt.

Verfasst: 15. September 2010 19:57
von solarix
MartinS hat zwar Recht, aber zeig uns trotzdem noch die komplette run-Methode... Die Begriffe "Thread", "Schleife" und "QTimer" passen nicht zusammen...