Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Внизпоток и объявление процедуры Найти похожие ветки
← →
KIM (2005-11-15 20:28) [0]всем привет
приложение запускает поток(Tthrd1) который запускает еще несколько потоков(Tthrd2) в какой секции Tthrd1 объявить процедуру чтоб она была доступна в потоках(Tthrd2) ???
P.S. Tthrd1 <> Tthrd2
← →
begin...end © (2005-11-15 21:08) [1]Переформулируйте вопрос.
← →
KIM (2005-11-16 00:19) [2]чтото более простой формулировки придумать не получается
а в каком месте не понятно ??
← →
Leonid Troyanovsky © (2005-11-16 09:18) [3]
> 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.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.032 c