QThread.terminate() unter Linux

Alles rund um die Programmierung mit Qt
Antworten
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

QThread.terminate() unter Linux

Beitrag von lepsai »

Subj. wird nicht ausfgeführt. Der Thread laüft einfach weiter...
Unter Win ist alles OK.

Ideen?
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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....
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QThread.terminate() unter Linux

Beitrag 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() ) );
	}
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Ich hab ja ein Thread und nicht ein Process...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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 :)
Antworten