Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 5Le multithreading10. Fonctions d'attente
Cours théorique :
Les fonctions d'attente permettent d'attendre de manière explicite qu'un événement se produise. Les fonctions d'attente sont WaitForSingleObject() et WaitForMultipleObjects(). Ces fonctions permettent d'attendre que l'état d'un objet change. Le thread appelant une de ces fonctions peut définir un temps maximal d'attente (qui sera éventuellement infini).
Différents objets peuvent être utilisés. Par exemple, la fonction WaitForSingleObject() peut être utilisée avec le HANDLE d'un thread. La fonction attendra alors que le thread se termine pour retourner. Pour attendre que plusieurs threads se terminent, une application pourra alors appeler la fonction WaitForMultipleObjects() en spécifiant qu'elle désire attendre que l'ensemble des threads ait terminé leur exécution. Ces fonctions mettent le thread qui les appelle en attente et sont donc excellentes au niveau performance. Leur utilisation est donc hautement recommandée.
Un événement créé explicitement peut également être utilisé avec ces fonctions. Ce cas sera étudié dans la partie consacrée aux événements. De même, le HANDLE d'un processus peut être utilisé de manière à attendre qu'il se termine.
Dans le cas de la communication inter-threads nous avons vu qu'une application pouvait utiliser une variable globale pour spécifier à ses threads qu'ils devaient se terminer. L'application doit ensuite attendre que les threads se terminent avant de quitter. Cette attente sera typiquement réalisée par un appel à la fonction WaitForMultipleObjects(). Lorsque cette fonction retournera, l'application sera alors assurée que l'ensemble des ses threads auront terminés et pourra quitter sans risque.
|