procedure TLifeEngine.TLifeThread.Execute;
var
Update, Timer: TStopwatch;
I: Integer;
begin
NameThreadForDebugging('Life Thread');
Update := TStopwatch.StartNew;
whilenot Terminated dobegin
Timer := TStopwatch.StartNew;
if Length(FNewBoard) > 0 thenbegin
FOriginalBoard := FNewBoard;
FNewBoard := nil;
endelse
FOriginalBoard := FLifeEngine.FLifeBoard;
SetLength(FNewBoard, Length(FOriginalBoard), Length(FOriginalBoard[0]));
if FParallel thenbeginTParallel.For(Low(FOriginalBoard), High(FOriginalBoard),
procedure (Value: Integer)
begin
ProcessCells(nil, Value);
end);
endelsefor I := Low(FOriginalBoard) to High(FOriginalBoard) do
ProcessCells(nil, I);
FGensPerSecond := {FFrequency / (EndTicks - StartTicks)} Timer.Frequency / Timer.ElapsedTicks;
if Update.ElapsedTicks >= Update.Frequency div FLifeEngine.UpdateRate thenbegin
FUpdating := True;
Synchronize(UpdateGeneration);
Assert(not FUpdating);
Update := TStopwatch.StartNew;
end;
Inc(FLifeEngine.FGenerationCount);
//Sleep(100);
FElapsed := Timer.ElapsedTicks;
end;
end;
El fragmento de código anterior, es un ejemplo de la nueva Parallel Programming Library que viene con Delphi XE7, el video del ejemplo se puede ver a continuación:
El código completo del vídeo para VCL y FMX esta en el siguiente link : Parallel Library