[C++] BOOST::THREAD schließt langsam

posi90

Erfahrenes Mitglied
Hallo,

Ich verwende BOOST::THREAD und habe Probleme beim Schließen meiner Anwendung.

Kurze Funktionsübersicht:

MainThread:
C++:
void StopRender()
{
	running = false;
	//RenderThread->join();	//verursacht ~1s Verzögerung
	//delete RenderThread;
}
RenderThread:
C++:
void RenderLoop()
{
	while(running)
	{
		//...rendering, sleep (max. 16ms!)
	}
	cleanup();
}

Wie hier zu erkennen sein sollte, möchte ich den RenderThread schließen.
Anschließend soll das Programm sofort beendet werden.

Mein Problem besteht darin, dass beim Funktionsaufruf von RenderThread->join() das Programm zirka eine Sekunde braucht, um sich zu schließen.

Ist es ein Problem, wenn beim Schließen der MainThread nicht auf den RenderThread wartet?

Die Verzögerung tritt auch dann auf, wenn die Renderschleife leer ist.

mfg. Poseidon
 
Zuletzt bearbeitet von einem Moderator:
Nein, macht keinen unterschied. Bei einer Verzögerung von über einer Sekunde muss mehr geschehen, als eine boolsche Abfrage.

Die Verzögerung liegt beim join().

Weißt du ob ein join() notwendig ist? Bzw. ob der Hauptthread vor dem Unterthread geschlossen werden darf?

mfg.
 
Mit diesem cleanup() wollte ich darauf hinweisen, dass der Renderthread bei running=false, nicht sofort terminiert wird.

Die Verzögerung tritt aber auch bei einer leeren Schleife ohne cleanup() auf.

Tut mir leid, dass ich noch keine näheren Angaben gemacht habe, völlig darauf vergessen.

Compiler: MinGW
OS: Win7 x64
BOOST: V1.53.0

Habe gerade herausgefunden, dass nicht join() die Ursache ist.

C++:
#include <boost/thread.hpp>

bool running = true;

void threadfunc()
{
	while(running);
}

int main()
{
	boost::thread *x=new boost::thread(threadfunc);
	boost::this_thread::sleep(boost::posix_time::milliseconds(1));
	running=false;
	x->join();
	delete x;
	return 0;
}

Schließt sofort. Werde die Fehlersuche selbst weiter eingrenzen, danke für die Beteiligung!
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück