Hallo zusammen,
kaum hatte ich mir gestern Abend die Ideen von Betrag #2 zu Herzen genommen, ergab sich postwendend ein zweites Problem in diesem Kontext.
In einer Schleife
for i := 0 to iBloecke - 1
erzeuge ich bei jedem Durchlauf einen Thread (mithilfe der Klasse TThread), sofern die maximale Anzahl nicht überschritten wird (hier: 4). Diese erhalten, wie eingangs erwähnt, ihre Aufträge übermittelt und beginnen unverzüglich mit der Berechnung.
Sofern alle "Slots" belegt sind, sprich max. Anzahl an Threads erreicht ist, müsste das Hauptprogramm logischerweise in der Schleife warten, bis die Threads wieder geschlossen sind. Im OnTerminate lasse ich mir vorher die Ergebnisse sichern.
- Wäre es hier möglich, Waitformultipleobjects(length(lpHandles), @lpHandles[0], true, INFINITE);
zu nehmen?
- Könnte es bei "kurzen" Aufträgen zu Problemen kommen, dass der Thread schon vor Aufruf von waitformultipleobjects
beendet ist, welcher erst nach Start der max. Anzahl an Threads bei (i mod iThreads = iThreads - 1) or (i = iBloecke - 1)
erfolgt?
- Wie ist die zeitliche Reihenfolge - Ende von Execute --> OnTerminate(Aufruf einer Methode) --> bis hier wartet waitfor...
?
- Wer muss den Thread wie schließen / schließt er sich doch selbst?
Ich hoffe doch inständig, dass ihr mir da etwas Licht ins Dunkle bringen könnt.
Liebe Grüße
Hannes