-
Это процедуры отрисовки. GetMem тормоз.
а массив типа это газ.
-
>> тогда сделай массив полем класса потока > Непотокобезопасно. Только локальный :(
??? В каждом потоке использовать поле класса потока небезопасно??? Это если только лезть к нему из 1000 других потоков, кроме одного потока-владельца.
-
Во. А если сделать так:
var Form1: TForm1; MAX:integer; Bytelen:integer;
implementation
{$R *.dfm}
procedure proc(var A:array of integer); begin a[12]:=555; showmessage(inttostr(a[12])); end;
procedure DoSomething; asm sub esp,Bytelen mov eax,esp mov edx,MAX call proc add esp,Bytelen end;
procedure TForm1.Button1Click(Sender: TObject); begin DoSomething; end;
initialization MAX:=40; Bytelen:=(MAX+1)*sizeof(integer);
end.
? Так вроде должно работать.
-
> SergP © (09.06.17 21:44) [22]
Все несколько сложнее, см. реализацию этой идеи в исходниках (искать что-то вроде StackAlloc)
-
Проще использовать один глобальный массив, а в процедуру передвать линейный адрес смещения в массиве.
-
>по умолчанию под потоковый стек выделяется всего один мегабайт У меня пока локальный массив 10,54 Кб. Для 5K хватит. 20,48 Кб для 8K, но я пока таких мониторов не видел.
-
> [25] dmk © (09.06.17 22:15) > но я пока таких мониторов не видел
Мониторов может быть много, так что не надо на разрешение завязываться. Про поле класса потока ты, похоже, не то что-то понял.
-
threadvar
|