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

Previous  Top  Next

    
 

 

 

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

 

 

Странный вопрос. Я бы понял, если бы требовалось передавать данные во время работы нити. А так обычно поступают следующим образом.

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

 

Например:

Code:

......

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.

 

 

 

 

 

©Drkb::00305

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