Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
4-37971
GIL
2003-11-06 14:29
2004.01.13
как поменять иконку в трее?


4-37991
Dunmer
2003-11-10 11:31
2004.01.13
Как оптимизировать Ресолв ДНС


14-37910
_Mikhail
2003-12-21 13:01
2004.01.13
Вопрос по dll


3-37581
Vanoshka
2003-12-17 11:24
2004.01.13
Транзакции в InterBase


3-37583
bulanovk
2003-12-13 23:08
2004.01.13
Проблема с ADOQUERY и MySQL





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