Добрый день. Есть вариант передачи параметров через string
Код:
unit Unit1;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses uLoadPage, uGlobalVar;
(*-----Запуск процесса многопотокой закачки страниц*)
procedure TForm1.Button6Click(Sender: TObject);
var
StrLst:TStringList;
Str:string;
begin
StrLst:=TStringList.Create;
StrLst.Text:=Memo2.Text; (*Передаем строки с УРЛ в Перем(аналог части Арр)*)
Str:=StrLst.Text; (*переносим Список в Строка*)
StartLoadTHreads(Str); (*Вызов ПРОЦ по запуску потоков закачки страниц*)
FreeAndNil(StrLst);
end;
++++++++++++++++++++++++++++++++++++++
unit uLoadPage;
interface
uses Classes, Generics.Collections, SysUtils;
Procedure StartLoadTHreads(ListOfUrls:string);
implementation
uses uGlobalVar, uStartTHreadLoader, uThreadLoader;
(* 03.01.2013 Процедура запуска загрузки страниц в потоке*)
Procedure StartLoadTHreads(ListOfUrls:string);
var THread:TStartTHreadLoader;
begin
THread:=TStartTHreadLoader.Create;
THread.UrlList:=ListOfUrls; (*передача списка УРЛ в поток*)
THread.Start;
end;
++++++++++++++++++++++++++++++++++++++
unit uStartTHreadLoader;
interface
uses Classes, SyncObjs, SysUtils, Generics.Collections;
type
TStartTHreadLoader = class(TThread)
private
FUrlList:string;
protected
procedure Execute; override;
Procedure BeginLoadTHreads(StrListOfUrls:TStringList);
public
constructor Create;
destructor Destroy; override;
property UrlList:string read FUrlList write FUrlList;
end;
implementation
uses Unit1, uLoadPage, uGlobalVar;
constructor TStartTHreadLoader.Create;
begin
inherited Create(True); (*Поток создаем в состоянии «Приостановлен»*)
FreeOnTerminate := True; (* Поток освободит ресурсы при окончании работы*)
Self.Priority := tpNormal;
end;
destructor TStartTHreadLoader.Destroy;
begin
inherited Destroy; (*уточнить, точно это нужно?*)
end;
procedure TStartTHreadLoader.Execute;
var StrLst:TStringList;
begin
StrLst:=TStringList.Create;
StrLst.Text:=UrlList; (*восстановление списка из строки*)
try
BeginLoadTHreads(StrLst); (*передача спика с УРЛ в ПРОЦ*)
finally
FreeAndNil(StrLst);
end;
end;
Procedure TStartTHreadLoader.BeginLoadTHreads(StrListOfUrls:TStringList);
begin
//тут много всего, но все работает
end;
end.
+++++++++++++++++++++++++++++++++++
в общем все работает, но приходится вначале СПИСОК переместить в строку, затем, в TStartTHreadLoader.Execute все назад возвращать.
Внимание!! Вопрос: можно ли обойтись без усложнения? без использования string. и как именно это сделать
вообще пробовал вместо string использовать TStringList, но почемуто туда не перемещались данные(строки) ПЕРЕМ всегда была пустой. какой то косяк от то что TStringList объект.