Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизРабота с потоками в компонентах. Найти похожие ветки
← →
Gear (2004-07-31 13:28) [0]Добрый день! Подскажите пожалуйста как сделать правильно. Имеем код КОМПОНЕТА(!):
uses mmsystem,Windows...
type
TAUD = class(TComponent)
private
{ Private declarations }
Facmin: Tacmin;
Facmout: Tacmout;
...
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy;override;
...
published
{ Published declarations }
...
end;
type
TAUDThread = class(TThread)
protected
procedure Execute; override;
procedure DoWork;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Sample", [TAUD]);
end;
constructor TAUD.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Facmin := Tacmin.Create(self);
Facmout := Tacmout.Create(self);
...
end;
procedure TRTPThread.Execute;
begin
Synchronize(DoWork);
end;
procedure TRTPThread.DoWork;
var
bCntinue:boolean;
date,lenght:PByte;
begin
...
bContinue:=true;
while ( bContinue ) do
begin
...
//вот тут затык...мне нужно в потоке запускать цикл с функцией FACMOut.Play которая объявлена в TAUD однако FACMout невидна %(
TAUD.FACMOut.Play(date,lenght);
...
end;
...
end.
Мне нужно в потоке запускать цикл с функцией FACMOut.Play которая объявлена в TAUD однако FACMout невидна %(. Что я делаю не так? Компилятор говорит Method identifier expected
← →
Gear (2004-07-31 13:30) [1]Пардон ошибки. Вот так вот лучше:
uses mmsystem,Windows...
type
TAUD = class(TComponent)
private
{ Private declarations }
Facmin: Tacmin;
Facmout: Tacmout;
...
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy;override;
...
published
{ Published declarations }
...
end;
type
TAUDThread = class(TThread)
protected
procedure Execute; override;
procedure DoWork;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Sample", [TAUD]);
end;
constructor TAUD.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Facmin := Tacmin.Create(self);
Facmout := Tacmout.Create(self);
...
end;
procedure TAUDThread.Execute;
begin
Synchronize(DoWork);
end;
procedure TAUDThread.DoWork;
var
bContinue:boolean;
date,lenght:PByte;
begin
...
bContinue:=true;
while ( bContinue ) do
begin
...
//вот тут затык...мне нужно в потоке запускать цикл с функцией FACMOut.Play которая объявлена в TAUD однако FACMout невидна %(
TAUD.FACMOut.Play(date,lenght);
...
end;
...
end.
Где закралась ошибка?
← →
Sun bittern © (2004-07-31 13:37) [2]Не верен подход сразу!
Наверно лучше сделать в самом компоненте поле типа TThread и с ним уже работать.
А пример с потоками случаем не из здешних статей?
← →
KSergey © (2004-07-31 13:39) [3]> TAUD.FACMOut.Play(date,lenght);
Я не понял: это что??
> объявлена в TAUD
В классе? А экземпляр этого класса - пушкин будет создавать? Или я что-то не понимаю?
> procedure TAUDThread.Execute;
> begin
> Synchronize(DoWork);
> end;
Слов нет.. :(
← →
Gear (2004-07-31 13:41) [4]а каим образом? пожалуйста,приведите пример применительно для этого случая если можно.
← →
Sun bittern © (2004-07-31 13:55) [5]Gear (31.07.04 13:41) [4]
Задачу подробней обрисуй!
← →
Gear (2004-07-31 23:38) [6]Задача в том, чтобы в компоненте TAUD бесконечный цикл
...
while ( bContinue ) do
begin
...
//вот тут затык...мне нужно в потоке запускать цикл с функцией FACMOut.Play которая объявлена в TAUD однако FACMout невидна %(
TAUD.FACMOut.Play(date,lenght);
...
end;
..выполнялся в отдельном потоке. Иначе, если этот цикл начинает выполнятся то дальше уже я естественно не могу работать с другими функциями этого компонента пока этот цикл не остановишь. Я решил этот цикл вывести в отдельный поток. Прав я или нет незнаю.
← →
Gear (2004-07-31 23:58) [7]To KSergey:
экземпляр TAUD зачем создавать когда это компонент???или я что то непонимаю? Мне компонент нужен с возможностью выделить в нём бесконечный цикл в отдельный поток и всё.Как это сделать я незнаю :(
← →
KSergey © (2004-08-01 09:21) [8]Чета рано вы за потоки взялись.
Читните для начала тут (чтобы в терминах не путаться)
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342
← →
Sun bittern © (2004-08-01 09:46) [9]TMyComp = class;
TMyThread = class(TThread)
private
FMyComp: TMyComp;
protected
procedure Execute; override;
public
constructor Create(AMyComp: TMyComp);
destructor Destroy; override;
end;
TMyComp = class(TComponent)
private
FActive: Boolean;
FThread: TMyThread;
FValue: Integer;
procedure SetActive(const Value: Boolean);
protected
procedure RandomValue;
public
constructor Create(AOwner : TComponent);
destructor Destroy; override;
published
property Active: Boolean read FActive write SetActive default True;
property Value: Integer read FValue;
end;
{ TMyThread }
constructor TMyThread.Create(AMyComp: TMyComp);
begin
inherited Create(True);
FMyComp := AMyComp;
Suspended := False;
end;
destructor TMyThread.Destroy;
begin
inherited Destroy;
end;
procedure TMyThread.Execute;
begin
Repeat
FMyComp.RandomValue;
until Terminated;
end;
{ TMyComp }
constructor TMyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FThread := TMyThread.Create(Self);
FActive := True;
end;
destructor TMyComp.Destroy;
begin
FThread.Terminate;
inherited Destroy;
end;
procedure TMyComp.RandomValue;
begin
repeat
FValue := Random(300);
until FValue = 400;
end;
procedure TMyComp.SetActive(const Value: Boolean);
begin
if FActive <> Value then
begin
FActive := Value;
FThread.Suspended := not FActive;
end;
end;
← →
Sun bittern © (2004-08-01 12:05) [10]{ TMyComp }
constructor Create(AOwner : TComponent); override;
← →
Gear (2004-08-01 12:54) [11]Спасибо большое Sun bittern! Вы мне помогли. Всё получилось.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c