Probleme bei Zugriff auf Member-Variable eines Threads

Alles rund um die Programmierung mit Qt
Antworten
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

Probleme bei Zugriff auf Member-Variable eines Threads

Beitrag 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
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Signal/Slot und Threads kommt irgendwie immer wieder ....

http://doc.qt.nokia.com/4.6/threads-qob ... ss-threads
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
MartinS
Beiträge: 6
Registriert: 26. Juli 2007 21:32

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

MartinS hat zwar Recht, aber zeig uns trotzdem noch die komplette run-Methode... Die Begriffe "Thread", "Schleife" und "QTimer" passen nicht zusammen...
Antworten