Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Работа с потоками в компонентах.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
14-1090867870
VID
2004-07-26 22:51
2004.08.15
Каким же Вы представляете себе это "будущее" ?


14-1090967469
GanibalLector
2004-07-28 02:31
2004.08.15
Хочу красоты


3-1090583655
Крысолов
2004-07-23 15:54
2004.08.15
jpg, delphi и sql server (а ещё и TDBCtlGrid)


14-1090705135
Soft
2004-07-25 01:38
2004.08.15
Был установлен Линукс.


14-1091168382
nasty
2004-07-30 10:19
2004.08.15
мастера: давайте что-нибудь приватизируем?