Attente de la fin d'exécution d'un thread
Remonter à Attente des autres threads
Pour attendre la fin de l'exécution d'un thread, utilisez la méthode WaitFor de l'autre thread. WaitFor ne revient que lorsque l'autre thread se termine, soit en finissant sa propre méthode Execute, soit à la suite d'une exception. Par exemple, le code suivant attend qu'un autre thread remplisse un objet liste de threads avant d'accéder aux objets de la liste :
if ListFillingThread.WaitFor then
begin
with ThreadList1.LockList do
begin
for I := 0 to Count - 1 do
ProcessItem(Items[I]);
end;
ThreadList1.UnlockList;
end;
if (pListFillingThread->WaitFor()) {
TList *pList = ThreadList1->LockList();
for (int i = 0; i < pList->Count; i++)
ProcessItem(pList->Items[i]);
ThreadList1->UnlockList();
}
Dans l'exemple précédent, l'accès aux éléments de la liste ne se fait que lorsque la méthode WaitFor indique que la liste a été remplie. La valeur renvoyée doit être affectée par la méthode Execute du thread en attente. Cependant, puisque les threads appelant WaitFor veulent connaître le résultat de l'exécution du thread, pas le code qui appelle Execute, la méthode Execute ne renvoie pas de valeur. A la place, la méthode Execute initialise la propriété ReturnValue. ReturnValue est alors renvoyée par la méthode WaitFor quand elle est appelée par d'autres threads. Les valeurs renvoyées sont des entiers. Votre application en détermine la signification.