Добрый день. Есть вариант передачи параметров через 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 объект. |