Hallo zusammen,
ich habe ein Problem mit der Funktion boost::thread::joinable(). Ich möchte damit überprüfen, ob ein Thread noch läuft oder ob er beendet ist. Die Doku sagt dazu: "Returns: true if *this refers to a thread of execution, false otherwise." Das "thread of execution" deute ich so, dass es heißt, dass der Thread noch läuft. Das scheint allerdings bei mir nicht zu funktionieren. Ich habe dazu einmal folgendes kurzes Test-Programm erstellt:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <boost/thread.hpp>
class A
{
public:
A() {}
~A() {std::cout<<"Objekt wurde zerstört"<<std::endl;}
};
void test()
{
A b;
}
int main()
{
boost::thread t(test);
boost::this_thread::sleep(boost::posix_time::seconds(1));
if(t.joinable())
std::cout<<"Thread läuft noch"<<std::endl;
else std::cout<<"Thread wurde beendet"<<std::endl;
return 0;
}
|
Es wird also ein Thread erstellt mit der Hauptfunktion "test". Diese tut nichts weiter als ein Dummy-Objekt zu erstellen und gleich wieder zu zerstören, damit ich die Bestätigung habe, dass die Funktion beendet ist. Nachdem der Thread erstellt wurde wird eine Sekunde gewartet - der Thread sollte also auf jeden Fall beendet sein (wie auch das Dummy-Objekt bestätigt). Anschließend prüfe ich (meiner Meinung nach) mit t.joinable, ob der Thread beendet wurde. Die Ausgabe ist: "Thread läuft noch"
Wenn ich allerdings vor dem Aufruf von t.joinable t.join aufrufe kommt die Meldung "Thread wurde beendet".
Habe ich hier einen Denkfehler oder liegt ein Fehler vor?
Vielen Dank!