Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
1-37631
A JI E LLI A
2003-12-27 16:20
2004.01.13
Кто знает, есть ли функция чтения чисел из текстового файла?


6-37834
Andersen
2003-11-06 12:08
2004.01.13
FTP


6-37832
demongr
2003-11-09 21:13
2004.01.13
idhttp1.Get и Proxy


3-37502
Nikita
2003-12-15 16:09
2004.01.13
Вопрос по таблицам Paradox


1-37716
MScorp
2003-12-30 17:58
2004.01.13
Вывод текста в консоль




   Наверх