Seite 1 von 1

QThread.terminate() unter Linux

Verfasst: 7. Juli 2005 13:50
von lepsai
Subj. wird nicht ausfgeführt. Der Thread laüft einfach weiter...
Unter Win ist alles OK.

Ideen?

Verfasst: 7. Juli 2005 16:48
von Goos
Warning: This function is dangerous, and its use is discouraged.
The thread may or may not be terminated immediately...


Wieso willst das ueberhaupt so machen, wenn ich mal so neugierig sein darf? :)

Goos

Verfasst: 7. Juli 2005 17:05
von lepsai
ich habe folgende Situation:

gegeben ist:
a) ein Qt Programm
b) eine Nicht-QT Dll, die auch nicht an Qt-Programm gelinkt ist.

b enthält eine Funktion, die eine lange Berechnung durchführt.

Das Programm a lädt zur Laufzeit Dll b. Der Benutzer hat nun die Möglichkeit, die Berechnung zu starten. Es kann aber sein, dass diese abgebrochen werden muss. z.B. wenn die Berechnungsparameter falsch gesetzt sind, oder wenn der Benutzer kein Bock hat, lange zu warten.
Daher läuft der Aufruf der Berrechungsmethode in einem separaten Thread...

Ich versuche auch sicher zu terminieren, etwa so:

while(thread.running())
thread.terminate();

aber das bringt auch nix.... Das Ding läuft und läuft....

Verfasst: 8. Juli 2005 10:17
von Goos
Hmmm, das sind irgendwo schlechte Voraussetzungen.
Wenn die Dll nicht vorsieht, dass ihre Brechnungen abgebrochen werden koennen, dann ist auch so ein terminate nicht der richtige Weg.
Ansich ist das dann aber eher ein Dll-Problem. Ich vermute aber mal, dass die Dll nicht von dir ist, oder?

Goos

Verfasst: 8. Juli 2005 10:35
von lepsai
Die Dll ist schon von mir, aber ich kann keine Interrupts in die Berechnungen einbauen, da es die Effizienz der Algorithmen stark beeinträchtigt...

Verfasst: 8. Juli 2005 10:44
von Goos
Ok, dann hast du ein Problem :D
Mir faellt dafuer keine schoene Loesung ein, ausser wirklich an der Dll rumzubasteln und zu versuchen die Berechnungen doch nur moeglichst wenig zu beeinflussen. (Sowas hat man ja schon oefter mal, gerade bei Berechnungen. Wer da auf abbrechen drueckt muss erstmal mindestens 20 Sekunden warten, bis auch wirklich was abgebrochen wird)

Ich hatte uebrigens auch unter Windows schon diverse Probleme mit dem terminate() und meide es deshalb jetzt.

Goos

Re: QThread.terminate() unter Linux

Verfasst: 8. Juli 2005 11:35
von macman
lepsai hat geschrieben:Subj. wird nicht ausfgeführt. Der Thread laüft einfach weiter...
Unter Win ist alles OK.

Ideen?
Schon mal die harte Variante probiert?

Code: Alles auswählen

	if (m_pProcess->isRunning())
	{
		m_pProcess->tryTerminate();
		QTimer::singleShot( 5000, m_pProcess, SLOT( kill() ) );
	}

Verfasst: 8. Juli 2005 11:40
von lepsai
Ich hab ja ein Thread und nicht ein Process...

Verfasst: 8. Juli 2005 12:25
von macman
lepsai hat geschrieben:Ich hab ja ein Thread und nicht ein Process...
Das habe ich mal geflissentlich ignoriert. Gebe ungern zu etwas übersehen zu haben :)