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

Вниз

Динамическое создание потока.   Найти похожие ветки 

 
Beginner ©   (2003-12-31 02:32) [0]

Уважаемые Мастера, подскажите, пожалуйста, как указать динамически созданному экземпляру класса TThread, где находится процедура Execute?

procedure TForm1.Button1Click(Sender: TObject);
var
MyThread: TThread;
begin
MyThread := TThread.Create(False);
//А как указать, что потоку следует выполнить процедуру
//TForm1.Execute? Или я вообще всё не так делаю?
//Покажите, пожалуйста, как следует правильно написать.
end;

procedure TForm1.Execute;
begin
DoSomeThing;
end;

Спасибо огромное.


 
Beginner ©   (2003-12-31 03:11) [1]

Вот блин, класс TThread абстрактный, поэтому всё, что я выше написал, не имеет смысла :-(


 
kull ©   (2003-12-31 11:50) [2]

Что-то Digitmana не видно...
Сейчас бы он тебе в самых теплых словах изложил: что такое Execute где он находится, где начинается и где заканчивается.
И ты был бы преисполнен благодарности... :)


 
Digitman ©   (2003-12-31 12:23) [3]


> [2]


ужимки, известные мне уже давно, и потому скучные, дешевые и примитивные... впрочем, год обезьяны грядет, вполне объяснимо это)


 
Строитель   (2003-12-31 12:25) [4]

Передавай в конструктор указатель на эту процедуру


 
Digitman ©   (2003-12-31 12:48) [5]

например, так :


type

TSomeMethod = procedure(Sender: TObject) of object;

TMyForm = class(TSomeForm)
...
MyThread: TMyThread;
procedure MyMethod(Sender: TObject);
...
end;

TMyThread = class(TThread)
private
FMethod: TSomeMethod;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean; Method: TSomeMethod);
end;

{ TMyThread }

constructor TMyThread.Create(CreateSuspended: Boolean; Method: TSomeMethod);
begin
inherited Create(True);
FMethod := Method;
if not CreateSuspended then
Resume;
end;

procedure TMyThread.Execute;
begin
if Assigned(FMethod) then
FMethod(Self);
end;

...

procedure TMyForm.Button4Click(Sender: TObject);
begin
MyThread:= TMyThread.Create(False, MyMethod);
...
end;



 
Строитель   (2003-12-31 17:48) [6]

2 Digitman

Ага... ага... именно так :) Хотя, если это метод формы, то, скорее всего в нем будет потоконебезопасный код поэтому вызывать его лучше:

procedure TMyThread.Execute;
begin
Synchronize(ExecMyProc);
end;

procedure TMyThread.ExecMyProc;
begin
if Assigned(FMethod) then
FMethod(Self);
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
1-37726
Evgeny78
2003-12-30 14:25
2004.01.13
OLE


3-37513
JIH
2003-12-16 00:41
2004.01.13
Нужна база на interbase


11-37598
nsvi
2003-04-26 02:20
2004.01.13
Глюк StatusText


14-37908
Думкин
2003-12-20 06:41
2004.01.13
С днем рождения! 20 декабря.


14-37846
Igorek
2003-12-22 12:16
2004.01.13
Удаление евента автоматом