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

Вниз

Поток в потоке   Найти похожие ветки 

 
Tivaya ©   (2006-08-02 21:11) [0]

Люди!
У меня есть поток. На определенном этапе выполнения он должен приостановиться, в этот момент создается второй поток, в который передаются данные из первого, каким-то образом обрабатываются и обработанные возвращаются в основной поток. Второй поток уничтожается. А первый после этого возобновляет работу. Вот.
Никак не могу понять какие методы тут уместно использовать,


 
Джо ©   (2006-08-02 21:12) [1]

Хочу спросить. А зачем эта вся чудная схема придумана?


 
jack128 ©   (2006-08-02 21:22) [2]

нафиг второй поток, если первый всё равно ждет пока тот не завершится? Все действия пусть выполняет первый поток.
Tivaya ©   (02.08.06 21:11)
Никак не могу понять какие методы тут уместно использовать,

для чего? Для передачи результата в основной поток? Ну например в OnTerminate можно эти данные получить..


 
Tivaya ©   (2006-08-02 21:46) [3]


> Хочу спросить. А зачем эта вся чудная схема придумана?
>

Это для тренировки использования методов потока. Сама знаю, что абсурд, но вот надо сделать и все.


 
Tivaya ©   (2006-08-02 21:47) [4]


> Ну например в OnTerminate можно эти данные получить..
>

Как конкретно?!


 
Джо ©   (2006-08-02 21:47) [5]

Ну, если для тренировки, то нужно тренироваться, не буду мешать :)


 
Пусик ©   (2006-08-02 22:15) [6]


> Tivaya ©  


Один вариант из многих:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type

 TThr1=class(TThread)
   FStr: String;
   procedure Execute; override;
   procedure EndChild(Sender: TObject);
   procedure ShowStr;
 end;

 TThrChild1=class(TThread)
   FParm: String;
   constructor Create(const Parm: String);
   procedure Execute; override;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TThr1 }

procedure TThr1.EndChild(Sender: TObject);
begin
 FStr := TThrChild1(Sender).FParm;
 Synchronize(ShowStr);
 Resume;
end;

procedure TThr1.Execute;
begin
 FreeOnTerminate := True;
 with TThrChild1.Create("String parm1") do
 begin
   OnTerminate := EndChild;
   Resume;
 end;
 Suspend;
 with TThrChild1.Create("String parm2") do
 begin
   OnTerminate := EndChild;
   Resume;
 end;
 Suspend;
 with TThrChild1.Create("String parm3") do
 begin
   OnTerminate := EndChild;
   Resume;
 end;
 Suspend;
end;

procedure TThr1.ShowStr;
begin
 Form1.Memo1.Lines.Add(FStr);
end;

{ TThrChild1 }

constructor TThrChild1.Create(const Parm: String);
begin
 inherited Create(True);
 FreeOnTerminate := True;
 FParm :=Parm;
end;

procedure TThrChild1.Execute;
begin
 try
   FParm := FParm+"... Passed";
   Sleep(1000);
 except
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 TThr1.Create(False);
end;

end.


 
Tivaya ©   (2006-08-02 22:26) [7]

Пусик, спасибо большое! :)



Страницы: 1 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.067 c
15-1153415507
grisme
2006-07-20 21:11
2006.08.20
Системы счисления


15-1153550962
DillerXX
2006-07-22 10:49
2006.08.20
Второй раз пытаюсь - опять никак :(


2-1154027394
Gloomer
2006-07-27 23:09
2006.08.20
Как перехватить минимизацию формы?


15-1153735483
Nic
2006-07-24 14:04
2006.08.20
Помогите найти e-mail С. Орлика плиз!


2-1154348555
Neket
2006-07-31 16:22
2006.08.20
IdSNMP1