Текущий архив: 2011.02.06;
Скачать: CL | DM;
ВнизРабота с потоками Найти похожие ветки
← →
asd (2010-11-15 23:20) [0]Здравствуйте. Работаю с потоками.
TMyClass = class (TThread)
public
constructor Create(i: integer); reintroduce;
destructor Destroy(); override;
procedure Execute(); override;
end;
{ TMyClass }
constructor TMyClass.Create(i: integer);
begin
inherited Create(true);
FreeOnTerminate := true;
end;
destructor TMyClass.Destroy;
begin
Form1.Memo1.Lines.Add("sss");
inherited;
end;
procedure TMyClass.Execute;
var
i: integer;
begin
i := 0;
while i < 1000 do begin
inc(i);
end;
Form1.Memo1.Lines.Add("Terminate");
Terminate();
end;
Далее я создаю поток и запускаю его
procedure TForm1.Button1Click(Sender: TObject);
var
cl: TMyClass;
begin
cl := TMyClass.Create(5);
cl.Execute();
end;
Проблема в том что после отработки метода Execute() поток не освобождается. Мне нужно чтобы поток сам уничтожался после отработки Execute. Как этого добится?
← →
Юрий Зотов © (2010-11-15 23:30) [1]Из Execute уберите 2 строки:
Form1.Memo1.Lines.Add("Terminate");
Terminate();
Из деструктора уберите 1 строку:Form1.Memo1.Lines.Add("sss")
Процедуру запуска перепишите:procedure TForm1.Button1Click(Sender: TObject);
begin
TMyClass.Create(5).Resume
end;
Потом поставьте в деструкторе точку останова, запустите программу и убедитесь, что все работает.
Потом читайте справку по классу TThread. Много нового найдете.
← →
Amoeba_ (2010-11-15 23:33) [2]Смотрим на этот код (то, где первая ошибка):
> procedure TMyClass.Execute;
> var
> i: integer;
> begin
> i := 0;
> while i < 1000 do begin
> inc(i);
> end;
> Form1.Memo1.Lines.Add("Terminate");
> Terminate();
> end;
Читал, что было Delphi написано в модуле потока? Придется процитировать:
Methods and properties of objects in visual components can only be used in a method called using Synchronize.
А теперь срочно читать эту статью до полного просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1370
Страницы: 1 вся ветка
Текущий архив: 2011.02.06;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.004 c