Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как передать в поток TThread двумерный дин. массив


Автор: Desperate 8.11.2018, 23:27
Собственно вопрос:

Создал простой поток, который должен использовать двухмерный массив 
mas:array of array of integer;

массив инициализируется на главной форме и передается в поток.

В поток передаю так же размеры массива.

Но тут ругается на память.

поток:

....
 protected
    procedure Execute(); override;
  public

    ThSizeRow:integer;  //Передаем размерность строк
    ThSizeCol:integer;  //Передаем размерность столбцов
    pMas : array of array of integer; //массив
    ThResult:TStrings;

  end;

....

Как правильно передать и использовать двухмерный массив в потоке?





Автор: Hiori 9.11.2018, 09:28
Код

type
   TMyArray = array of array of Integer;
   PMyArray = ^TMyArray;

и потом в поток передавайте ссылку на массив, передавать его размерность - вообще излишек, для этого есть функции low и high

Автор: Desperate 11.11.2018, 12:10
Вопрос решен после прочтения бааальшой и подробной статьи про указатели
https://www.transl-gunsmoker.ru/2009/09/blog-post.html

Собака была зарыта в том что массив инициализировал и наполнял обработчике кнопки, там же он был описан. Точнее его описание локальным массивом  и сыграло злую шутку. Поток стартует, но при этом не приостанавливает выполнение команд процедуры создавшей поток. Как следствие потоку передал указатель и тут же стер массив из памяти. Вынес описание массива в глобальные переменные все отлично заработало.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)