![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Есть вариант передачи параметров через 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 объект. |
Этот пользователь сказал Спасибо за это полезное сообщение: | ||
OTVET (18.01.2013)
|
#2
|
||||
|
||||
![]() передай в конструктор TStringList и в нем сделай Assign полю потока.
Пишу программы за еду. __________________ |