Fonction boost::thread::join() et indépendance d'un thread
Bonjour
je débute plus ou moins en matière de Boost et de threads.
J'attaque par le chapitre 6 Multithreading du livre de Boris Schäling (voir http://en.highscore.de/cpp/boost/index.html ).
A la sous-section 6.2, l'auteur écrit ceci :
As seen in the above example, a particular thread can be accessed via a variable such as t in order to e.g. wait for its termination using the join() method. However, the thread will continue to execute even if t loses its scope and is destroyed. A thread always binds to a variable of type boost::thread in the beginning, but once created, depends no longer on it.
Son exemple est le programme suivant ou un thread affiche 5 entiers à l'écran :
Code:
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>
#include <iostream>
#include <fstream>
void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}
void thread()
{
for (int i = 0; i < 5; ++i)
{
wait(1);
std::cout << i << std::endl;
}
}
int main()
{
boost::thread t(thread);
t.join();
} |
J'avais donc cru comprendre que la ligne finale du main était en quelque sorte ici facultative.
Toutefois si je la commente, le programme résultant n'affiche plus les entiers en console.
Et si je remplace le contenu de la fonction thread() de façon à le rendre indépendant d'un affichage console (par exemple en effectuant simplement la création d'un fichier), il en va de même : si la ligne t.join(); est commentée pas de création de fichier...
Du coup, je ne comprends plus très bien, d'après l'auteur le thread devrait continuer à s'exécuter indépendamment, même après la fin du main, mais ça ne semble pas être le cas. Ce que dit l'auteur est-il inexact ?