Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

© Зайцев Олег
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.
Остальные Вопросы

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог