Питання # 2 151 ... ікла проблема

Привіт всім.
У мене виникла проблема. Мені потрібно распараллелить програму, яка використовує для свого рішення генетичний алгоритм. Так ось. На З я це зробити можу легко, там є бібліотека MPI, але так як проект написаний на Delphi необхідно на них і релізовивать розпаралелювання.

Прочитала багато інформації по потокам, але че-то при реалізації випадають помилки.

Спробую пояснити.
У процедурі повинен створюватися масив потоків, кількість задається користувачами, в циклі вони повинні запускатися і працювати паралельно, далі по досягненню результатів повинні їх передавати в масив. Цей масив обробляється і переходить н аследующую ітерацію, де знову запускаються потоки, обраховане результати і т.д.

begin
SetLength (thread, parProc);
for ThreadCount: = 0 to parProc - 1 do
begin
// створюємо паралельні потоки і запускаємо їх пізніше
Thread [ThreadCount]: = ThreadGeneAlg.Create (true);
Thread [ThreadCount] .processNumber: = threadCount;
Thread [ThreadCount] .FreeOnTerminate: = true;
end;

for i: = 0 to колісество_ітерацій -1 do
[B] begin [/ B]
// запускаємо паралельні процеси
for ThreadCount: = 0 to parProc - 1 do
Thread [ThreadCount] .Resume;

я так розумію, що тут потрібно вставити функцію очікування завершення всіх потоків, інакше головний процес піде працювати далі

але як я розумію, ця функція буде очікувати почергове завершення потоків.

for j: = 0 to parproc - 1 do
thread [j] .WaitFor;

// далі повинні потоки обмінюватися результатами і цикл переходить на наступну ітерацію
[B] end; [/ B]

// очищаємо масив потоків
for threadCount: = 0 to parProc - 1 do
thread [ThreadCount] .Free;
// і виходимо з процедури
end;

Але у мене великі підозри на те, що я неправильно цими потоками користуюся. Ось, наприклад, якби потік був запускався раз і після його виконання нічого не виконувала процедура, помилки не виникало. А у мене процедура Execute виконується, а при виході вилітає помилка "Thread Error: Невірний дескриптор (6)". Якщо не ставити процедуру WaitFor, то головний потік піде далі і вилетить купа помилок.
Загалом, допоможіть мені розібратися з цими потоками, будь ласка: (. [B] [/ B] ..