QThread blockiert GUI bei abbruch

Alles rund um die Programmierung mit Qt
Antworten
marvel
Beiträge: 105
Registriert: 9. August 2009 07:41

QThread blockiert GUI bei abbruch

Beitrag von marvel »

hallo,
ich habe einen converter mit GUI geschrieben. während des konvertierungsvorgangs wird ein weiterer thread gestartet der die berechnungen durchführt und somit die GUI nicht blockiert wird. jetzt kann es aber vorkommen das der user den konvertierungsvorgang abbrechen möchte. QThread::wait() blockiert die GUI und QThread::terminate() soll man ja nicht benutzen. was wäre eine vernüftige alternative um einen thread abzubrechen und dennoch die GUI nicht zu blockieren ?

kann man auch ne pause-fkt einbauen ?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Re: QThread blockiert GUI bei abbruch

Beitrag von pfid »

marvel hat geschrieben:hallo,
ich habe einen converter mit GUI geschrieben. während des konvertierungsvorgangs wird ein weiterer thread gestartet der die berechnungen durchführt und somit die GUI nicht blockiert wird. jetzt kann es aber vorkommen das der user den konvertierungsvorgang abbrechen möchte. QThread::wait() blockiert die GUI und QThread::terminate() soll man ja nicht benutzen. was wäre eine vernüftige alternative um einen thread abzubrechen und dennoch die GUI nicht zu blockieren ?

kann man auch ne pause-fkt einbauen ?
Das kommt auf deine Implementierung an. In der Regel setzt man sich ein Flag und fragt das in der Run-Loop ab. Eine Stop-Funktion setzt dieses Flag dann, so dass der Thread die Run-loop verlässt.
marvel
Beiträge: 105
Registriert: 9. August 2009 07:41

Beitrag von marvel »

in der run() funktion werden zwei funktionen aus einer klasse aufgerufen.

Code: Alles auswählen

Converter_Thread::Converter_Thread(Converter *con) : QThread()
{
	converter = con;
}

Converter_Thread::~Converter_Thread()
{

}

void Converter_Thread::run()
{
	stop = converter->startParser();
	if(!stop)
	{
		return;
	}
	converter->startConverter();
}
ich habe das ganze nun so gelöst das wenn ich den cancel button drücke das die startParser() funktion false zurückgibt und dann einfach returned wird. ich denke darauf wolltest du hinaus.
Antworten