Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.039 c
15-1153891887
Ega23
2006-07-26 09:31
2006.08.20
С Днём рождения! 26 июля


2-1154516059
VitV
2006-08-02 14:54
2006.08.20
DBGrid случайное расположение данных


2-1154371338
FFx01
2006-07-31 22:42
2006.08.20
Статистическая загрузка dll


4-1145953633
Creative
2006-04-25 12:27
2006.08.20
разница между WM_CREATE и WM_COMMAND


2-1154202701
ronyn
2006-07-29 23:51
2006.08.20
pchar pansichar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский