スレッドの実行が終了するまで待つ
スレッドの調整:インデックス への移動
別のスレッドの実行が終了するまで待つには,そのスレッドの WaitFor メソッドを使用します。WaitFor は,そのスレッドが終了するまで戻りません。スレッドが終了するのは,そのスレッドの Execute メソッドが終了するか,または例外によって終了した場合です。たとえば次のコードは,別のスレッドが実行を終了するまで(スレッドリストオブジェクトを埋めるまで)待ってから,そのリストのオブジェクトにアクセスします。
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();
}
先の例では,リスト項目にアクセスできるのは,リストが正常に埋められたことが WaitFor メソッドによって示された場合だけです。このときの戻り値は,待たせているスレッドの Execute メソッドから与えなければなりません。ただし,WaitFor を呼び出したスレッドは,Execute を呼び出したコードの実行結果ではなく,スレッドの実行結果が知りたいので,Execute メソッドが値を返すのではありません。そのかわりに,Execute メソッドは ReturnValue プロパティを設定します。ほかのスレッドが WaitFor を呼び出した場合は,WaitFor は ReturnValue を返します。この戻り値は整数です。戻り値の意味はアプリケーションが決定します。