Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

поток и объявление процедуры [D7, XP]


KIM ©   (2005-11-15 20:28:00) 

всем привет
приложение запускает поток(Tthrd1) который запускает еще несколько потоков(Tthrd2) в какой секции Tthrd1 объявить процедуру чтоб она была доступна в потоках(Tthrd2) ???

P.S.  Tthrd1 <> Tthrd2


Leonid Troyanovsky   (2005-11-16 09:18:00) [1]


> KIM   (15.11.05 20:28)  

> приложение запускает поток(Tthrd1) который запускает еще
> несколько потоков(Tthrd2) в какой секции Tthrd1 объявить
> процедуру чтоб она была доступна в потоках(Tthrd2) ???


Т.к. Tthrd1 запускает Tthrd2, то после создания последнего
ему можно передать ссылку на нужный метод Tthrd1.
Например,

type
Tthrd1 = class (TThread)
private
  procedure XXX (Sender: TObject); // вызываемый метод
  ..
end;

Tthrd2 = class(TThread)
private
  FOnXXX : TNotifyEvent; // ссылка
  ..
protected
  procedure DoXXX; dynamic; // метод диспетчеризации
  ..
public
  property OnXXX: TNotifyEvent read FOnXXX write FOnXXX;
end;

procedure Tthrd2.DoXXX; // вызов метода по ссылке FOnXXX
begin
  if Assigned(FOnXXX) then
    FOnXXX(Self);
end;

 procedure Tthrd1.Execute; // override;
 begin
   ..
   with Tthrd2.Create(True) do
      begin
        ..
        OnXXX := XXX; // назначили ссылку
        Resume; // пустили поток
      end;
    ..
 end;


Ну, а Tthrd2 в нужных местах вызывает DoXXX, который, собс-но, и
выполняет метод XXX класса Tthrd1.

Кроме того, весьма вероятно, что оные манипуляции потребуют на
каком-то этапе синхронизации (see also: TThread.Synchronize).

--
Regards, LVT.


KIM   (2005-11-16 00:19:00) [2]

чтото более простой формулировки придумать не получается

а в каком месте не понятно ??


begin...end   (2005-11-15 21:08:00) [3]

Переформулируйте вопрос.


Наверх

Титульная страница Поиск, карта сайта Написать письмо