A 2. kérdés 151 ... a probléma volt

köszönöm mindenkinek.
Volt egy probléma. Egy olyan programot kell párhuzamosítanom, amely egy genetikai algoritmust használ a megoldáshoz. Tehát ez az. A C-en ezt könnyedén elvégezhetem, van egy MPI könyvtár, de mivel a projekt Delphi-ben van írva, szükség van rájuk, és fel kell szabadítani a párhuzamosságot. Sok információt olvastam a szálakról, de amikor végrehajtom azokat, hibák lépnek fel.

Megpróbálom elmagyarázni.
Az eljárásnak létre kell hoznia egy sor szálat, a számot a felhasználók határozzák meg, egy ciklusban kell őket futtatni és futni párhuzamosan, majd az eredmények elérése után át kell adni egy tömbre. Ez a tömb feldolgozásra kerül, és folytatja a következő iterációt, ahol a szálak újraindítása, az eredmények kiszámítása stb.

kezdődik
SetLength (szál, parProc);
a ThreadCount esetében: = 0 - parProc - 1 do
kezdődik
// hozzon létre párhuzamos szálakat és futtassa azokat később
Téma [ThreadCount]: = ThreadGeneAlg.Create (true);
Szál [ThreadCount] .processNumber: = threadCount;
Szál [ThreadCount] .FreeOnTerminate: = true;
végén;

az i: = 0-ig az 1-es egész számra
[B] kezdődik [/ B]
// párhuzamos folyamatok futtatása
a ThreadCount esetében: = 0 - parProc - 1 do
Téma [ThreadCount] .Resume;

Tudomásul veszem, hogy itt be kell helyeznie egy függvényt, hogy megvárja az összes szál befejezését, különben a fő folyamat tovább fog működni

de ahogyan megértem, ez a funkció várni fogja, hogy a szálak egyenként leálljanak.

j: = 0 a parproc-1-hez
szál [j] .WaitFor;

Továbbá a patakok eredményeket cserélnek, és a ciklus a következő iterációhoz vezet
[B] vége; [/ B]

// törölje a szálak tömbjét
a threadCount esetében: = 0 a parProc-1-hez
menet [ThreadCount] .Free;
// és lépjen ki az eljárásból
végén;

De nagy gyanúm van, hogy ezeket a patakokat helytelenül használom. Itt például, ha a szálat egyszer elindították, és a végrehajtás után semmi sem történt, a hiba nem fordult elő. És van a Végrehajtási eljárásom, és amikor kilépek, a "Téma hiba: Érvénytelen leíró (6)" hiba repül. Ha nem állítja be a WaitFor eljárást, akkor a fő szál tovább fog futni, és sok hiba kerül ki.
Általában segíts nekem ezekkel a szálakkal foglalkozni, kérlek: (. [B] [/ B] ..