Главная страница
    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.47 MB
Время: 0.039 c
15-1153732118
Ketmar
2006-07-24 13:08
2006.08.20
как запихнуть в образ MDF ещё один файлик?


1-1152435012
17Landgraf
2006-07-09 12:50
2006.08.20
Как узнать, что файл полностью загрузился?


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


2-1154419487
Neket
2006-08-01 12:04
2006.08.20
SNMP


4-1146456876
kernel
2006-05-01 08:14
2006.08.20
Add resource





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