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 :
J'avais donc cru comprendre que la ligne finale du main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }était en quelque sorte ici facultative.
Code : Sélectionner tout - Visualiser dans une fenêtre à part t.join();
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 ?
Partager