Код:
1 2 | Move(( Pointer (DataArr[NumBlock,NumData].Data))^, n1arrB[ 0 ], SectLen);
Move(( Pointer (RuleArr[NumBlock,NumRule].Data))^, n2arrB[ 0 ], SectLen);
|
Цитата:
Сообщение от Фёдор Сумкин
"Здесь что-то на эльфийском"
|
Зачем такие сложные построения, вот в них ты наверное где-то и запутался. Вот похожий на твой код я набросал, и всё гораздо проще:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | type
TSomeData = record
Data:TBytes;
end ;
TForm1 = class (TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FParam: array of array of TSomeData;
public
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1 . Button1Click(Sender: TObject);
var
i: Integer ;
j: Integer ;
somedata:RawByteString;
begin
somedata:= '0123456789' ;
SetLength(FParam, 10 );
for i := Low(FParam) to High(FParam) do
begin
SetLength(FParam[i], 10 );
for j := Low(FParam[i]) to High(FParam[i]) do
begin
SetLength(FParam[i,j].Data, 10 );
Move(somedata[ 1 ],FParam[i,j].Data[ 0 ], 10 );
end ;
end ;
somedata:= ' ' ;
Move(FParam[ 9 , 9 ].Data[ 0 ],somedata[ 1 ], 10 );
ShowMessage(somedata);
end ;
end .
|
Скорее всего из-за таких сложных преобразований у тебя поток где-то и валится. А так как нет обработчика ошибок, то при ошибке поток вываливается из Exceute, а suspended которого ты ждёшь не выставлен. И тебе кажется что поток повис, а всё гораздо лучше, он просто упал
Код:
1 2 3 4 | FindTR1 . Resume;
tmp1 := 0 ;
while FindTR1 . Suspended = false do begin
|
Это тож за гранью. Зачем нужно делать
параллельно выполняющийся поток, если ты всё равно ждешь окончания его работы?
Не понятного больше чем понятного. Ну или ты передаёшь не всю картину происходящего.