Потоки в режиме выполнения
От: par  
Дата: 13.04.05 09:56
Оценка:
Можно ли в Делфи создавать потоки в режиме выполнения не
объявляя предварительно класс-наследник TThread?
т.е.
не вот так

сначала
........
unit TCPIO;

interface

uses
  Classes,IdTCPClient,IdGlobal,SysUtils;

type
  ReadThread = class(TThread)
  protected
    procedure Execute; override;
  public
  ReadBuf:TStringList;
  TCPClient:TIDTCPCLient;
  end;

...........
implementation

procedure ReadThread.Execute;
begin
  while not self.Terminated do
  begin
    try
   self.ReadBuf.Add (self.TCPClient.ReadLn);
    except on E:Exception do
      self.Terminate ;
    end;
  end;
end;

end.
.....
а потом

implementation

Procedure MyMainClass.Main;
var MyThread:ReadThread;
Begin
    MyThread:=ReadThread.Create(true);
    MyThread.TCPClient:=self;
    MyThread.ReadBuf:=self.ReadBuffer;
    MyThread.Resume;
............
и т.д.

End;


а вот так

[/pascal]

Procedure ReadFromSocket
begin
.......
здесь собсно что должно жить в потоке
.......
end;

Procedure MyMainClass.Main;
var MyThread:TThread;
Begin
MyThread:=TThread.Create(true);
MyThread.Execute:= ReadFromSocket;
MyThread.Resume;
............
и т.д.

End;
[/pascal]

к сожалению камрады из борланда запхали Execute в Protected раздел такая конструкция не катитъ
что можно посоветуете ?
Re: Потоки в режиме выполнения
От: Softwarer http://softwarer.ru
Дата: 13.04.05 10:18
Оценка: 1 (1)
Здравствуйте, par, Вы писали:

par>к сожалению камрады из борланда запхали Execute в Protected раздел такая


Это звучит... странно.

На выбор — два метода. Правильный — написать наследника TThread, который умеет выполнять произвольную поданную на вход процедуру. Более короткий — воспользоваться BeginThread.
Re: Потоки в режиме выполнения
От: mkopachev  
Дата: 13.04.05 11:15
Оценка:
Здравствуйте, par, Вы писали:

par>Можно ли в Делфи создавать потоки в режиме выполнения не

par>объявляя предварительно класс-наследник TThread?

[SKIP]

par>к сожалению камрады из борланда запхали Execute в Protected раздел такая конструкция не катитъ

par>что можно посоветуете ?

Легко — смотри на функцию CreateThread() WinAPI в MSDN. Только IsMultyThread в TRUE не забудь выставить, а то словишь глюку с диспетчером памяти .

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
Re: Потоки в режиме выполнения
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.04.05 07:31
Оценка:
Здравствуйте, par, Вы писали:

par>Можно ли в Делфи создавать потоки в режиме выполнения не

par>объявляя предварительно класс-наследник TThread?
А собственно, зачем? Ты хочешь подменять функцию потока на лету? Ну так сделай специального наследника:
type
  THandlerO = procedure of object;
    THandlerP = procedure;
  THandlerThread = class(TThread)
    public
      constructor Create(handler: THandlerO); overload;
        constructor Create(handler: THandlerP); overload;
    protected
      procedure Execute; override;
    private
    FHandlerP: THandlerP;
        FHandlerO: THandlerO;
    end;

implementation
constructor THandlerThread.Create(handler: THandlerO);
begin
  inherited Create;
    FHandlerO = handler;
end;

constructor THandlerThread.Create(handler: THandlerP);
begin
  inherited Create;
    FHandlerP = handler;
end;

procedure THandlerThread.Execute;
begin
  if Assigned(FHandlerO)
        FHandlerO
    else if Assigned(FHandlerP)
        FHandlerP;
end;


Ну и потом соответственно
MyThread:=THandlerThread.Create(ReadFromSocket);
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Потоки в режиме выполнения
От: par  
Дата: 22.04.05 08:32
Оценка:
Здравствуйте, Sinclair,

Я баран , как сам не догдался не знаю ,
локальный затуп роизошел наверное
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.