Как передать при создании нити (Tthread) ей некоторое значение?

К примеру, функция "прослушивает" каталог на предмет файлов. Если находит, то создает нить, которая будет обрабатывать файл. Потомку надо передать имя файла, а вот как?

Странный вопрос. Я бы понял, если бы требовалось передавать данные во время работы нити. А так обычно поступают следующим образом.
В объект нити, происходящий от TThread дописывают поля. Как правило, в секцию PRIVATE. Затем переопределяют конструктор CREATE, который, принимая необходимые параметры заполняет соответствующие поля. А уже в методе EXECUTE легко можно пользоваться данными, переданными ей при его создании.
Например:

......

TYourThread = class(TTHread)

private

 FFileName: String;

protected

 procedure Execute; overrided;

public

 constructor Create(CreateSuspennded: Boolean;

 const AFileName: String);

end;

.....

constructor TYourThread.Create(CreateSuspennded: Boolean;

 const AFileName: String);

begin

 inherited Create(CreateSuspennded);

 FFIleName := AFileName;

end;

procedure TYourThread.Execute;

begin

 try

 ....

 if FFileName = ...

 ....

 except

 ....

 end;

end;

....

TYourForm = class(TForm)

....

private

 YourThread: TYourThread;

 procedure LaunchYourThread(const AFileName: String);

 procedure YourTreadTerminate(Sender: TObject);

....

end;

....

procedure TYourForm.LaunchYourThread(

 const AFileName: String);

begin

 YourThread := TYourThread.Create(True, AFileName);

 YourThread.Onterminate := YourTreadTerminate;

 YourThread.Resume

end;

....

procedure TYourForm.YourTreadTerminate(Sender: TObject);

begin

 ....

end;

....

end.

Источник: http://dmitry9.nm.ru/info/

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...