Seite 1 von 1

[Qt4] QThread, QTimer -> wie ist es richtig?

Verfasst: 26. Februar 2006 02:33
von apfei01
hallo,

ich moechte in einem qthread eine funktion implementieren, die in regelmaessigen abstaenden (1 sekunde) im hauptprogramm ein qlabel mit der aktuellen uhrzeit aktualisiert. beide varianten funktionieren prinzipiell - nur welche wuerdet ihr vorziehen und warum?

variante 1:

Code: Alles auswählen

Clock::Clock () : QThread () {
	
	start ();	
}

void Clock::run () {

	QTimer *timer = new QTimer ();
	connect (timer, SIGNAL (timeout ()), this, SLOT (update ()));
	timer -> start (1000);
	
	exec ();
	 
}

void Clock::update () {
	
		QMutexLocker locker(&mutex);
			
		QTime time = QTime::currentTime ();
		QString time_string = time.toString ("hh:mm:ss");
		emit updateClock (time_string);
}
variante 2:

Code: Alles auswählen

Clock::Clock () : QThread () {
	
	start ();	
}

void Clock::run () {

	forever {
		
		QMutexLocker locker(&mutex);
			
		QTime time = QTime::currentTime ();
		QString time_string = time.toString ("hh:mm:ss");
		emit updateClock (time_string);
	
		msleep (1000);
	}
}
73!
andy/dg0jaj

Verfasst: 26. Februar 2006 10:55
von upsala
Keine von beiden. Ich würde Variante 1 ohne QThread direkt ins Hauptprogramm einbauen.

Verfasst: 28. Februar 2006 18:34
von apfei01
hallo upsala,

danke für deine schnelle antwort. ich denke, ich habe mich etwas missverständlich ausgedrückt: mir ging es mehr um einen 'ordentlichen' programmierstil - und hier im speziellen wie man einen QThread zusammen mit einem QTimer korrekt verwendet/initialisiert. es ist sicherlich praktischer, das ganze im hauptteil einzubauen ...

vielleicht könntest du in diesem zusammenhang nocheinmal beide varianten bewerten?

73,
andy/dg0jaj.

Verfasst: 28. Februar 2006 21:23
von upsala
Tja, dann ist natürlich Variante 1 Interessanter, da du in Variante 2 keine anderen Dinge im Thread mehr erledigen kannst. Ein simples wait(...) ist meiner Meinung nach immer schlechte Programmierstil...