CodeNet / Языки программирования / Delphi & Kylix / FAQ - Часто задаваемые вопросы / Пишем инсталятор.
FAQ - Как передать при создании нити (TTHREAD) ей некоторое значение?
© Зайцев Олег
http://z-ol.chat.ru/
http://z-ol.chat.ru/
К примеру, функция "прослушивает" каталог на предмет файлов. Если находит, то создает нить, которая будет обрабатывать файл. Потомку надо передать имя файла, а вот как?
Странный вопрос. Я бы понял, если бы требовалось передавать данные во время работы нити. А так обычно поступают следующим образом.
В объект нити, происходящий от 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.