Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
1-1091521163
VVolodia
2004-08-03 12:19
2004.08.15
Tab Control, Как поменять направление текста и цвет закладки


3-1089954838
Hereticsoul
2004-07-16 09:13
2004.08.15
список таблиц в mysql


14-1090519291
DSKalugin
2004-07-22 22:01
2004.08.15
скоро Internet Explorer закроют :-)))


14-1091015553
Nikolay M.
2004-07-28 15:52
2004.08.15
Задачка


1-1091164901
Vlad Oshin
2004-07-30 09:21
2004.08.15
Компилятор. Ошибка. Что не так?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский