Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизПоток в потоке Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c