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
...Ahora Embarcadero nos avisa la salida de su RAD Studio XE7, el cual puede ser usado además para crear apps, con una interfaz que se comparte, optimizada para los diferentes dispositivos, incluyendo gadgets y dispositivos “vestibles” (wearables)...