Текущий архив: 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.45 MB
Время: 0.008 c