La palabra clave ThreadVar inicia un conjunto de definiciones de variables que utilizan los subprocesos.
Cada subproceso recibe una instancia por separado de cada variable, lo que evita conflictos de datos entre ellos y preserva la independencia del subproceso.
Una dato a tener en cuenta cuando utilizamos ThreadVar, es que dichas variables se liberarán automaticamente de la memoria, siempre y cuando sean de un tamaño fijo, por ejemplo si son de tipo float, integer, char, etc. Las cadenas, las matrices dinámicas y las interfaces entre otro tipos dinámicos no se liberarán automáticamente.
Ejemplo de ThreadVar
var
Form1: TForm1;
ThreadVar
MyThreadVar: integer;
implementation
{$R *.dfm}
procedure TForm1.examplethreadvar;
var
I: integer;
begin
for I := 0 to 5 do
begin
TThread.CreateAnonymousThread(
procedure
var
J: integer;
s: string;
begin
MyThreadVar := random(100);
for J := 0 to 5 do
begin
Sleep(100);
s := MyThreadVar.ToString;
TThread.Queue(nil,
procedure
begin
ShowMessage(s);
end
);
end;
end).Start;
end;
end;
En el ejemplo anterior, podemos ver que cada uno de los subprocesos, obtiene su propio núnero aleatorio y dicha secuencia se repite en las cinco veces del bucle for.
Por ende verificamos que con una misma variables, se carga con un dato diferente en cada uno de los subprocesos.