Код:
Move((Pointer(DataArr[NumBlock,NumData].Data))^, n1arrB[0], SectLen);
Move((Pointer(RuleArr[NumBlock,NumRule].Data))^, n2arrB[0], SectLen);
Цитата:
Сообщение от Фёдор Сумкин
"Здесь что-то на эльфийском"
|
Зачем такие сложные построения, вот в них ты наверное где-то и запутался. Вот похожий на твой код я набросал, и всё гораздо проще:
Код:
type
TSomeData = record
Data:TBytes;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FParam:array of array of TSomeData;
public
{ Public declarations }
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 которого ты ждёшь не выставлен. И тебе кажется что поток повис, а всё гораздо лучше, он просто упал
Код:
FindTR1.Resume; // запускаем поток
tmp1 := 0;
while FindTR1.Suspended = false do begin // ждем окончания работы потока
Это тож за гранью. Зачем нужно делать
параллельно выполняющийся поток, если ты всё равно ждешь окончания его работы?
Не понятного больше чем понятного. Ну или ты передаёшь не всю картину происходящего.