Вниз
Скачать: CL | DM;

Убиваю TThread. Нужен совет :)   Найти похожие ветки 

← →
Alx2 ©   (2004-11-03 23:59) [0]

В главной форме рождение и смерть объекта - представителя потомка класса TThread - представлены так:

constructor TMainForm.Create(Owner: TComponent);
begin
 inherited;
 Solver := TGUISolver.Create(Memo, LengthEdit, DifferenceEdit, StringGrid); // Создаем в режиме Suspended
end;

destructor TMainForm.Destroy;
begin
 Solver.Free; // Убиваем еще работающий поток
 inherited;
end;

end;

Вот рабочее тело:

procedure TSolver.Execute; // предок  TGUISolver, потомок TThread
begin
 repeat
   WaitForSingleObject(Event.Handle, INFINITE); // Событие, ожидающее команды на запуск некоторого алгоритма с измененными параметрами
   if not isOwnerDead then // если форма, в контролы которой шлем лог еще жива
   try
     Synchronize(FillData); // Посылка лога
     State := ssRunning;
     Solve;               // Что-то вычисляем некоторым алгоритмом
     State := ssWaiting;
   except
     NeedForStop := True;
   end;
 until isOwnerDead or Terminated;
end;

Вопрос:
Во время убиения формы вызывается Solver.Free в то время, когда он еще активен.

Корректна ли следущая реализация деструктора:

destructor TSolver.Destroy;
begin
............ // Некоторый код для создания условий к выходу из цикла в Execute.
 WaitFor; // - Ждем завершения потока
 Event.Free;
 inherited; // Помираем.
end;

Конкретнее: уместен ли тут WaitFor?


← →
Игорь Шевченко ©   (2004-11-04 00:28) [1]


destructor TThread.Destroy;
begin
 if (FThreadID <> 0) and not FFinished then
 begin
   Terminate;
   if FCreateSuspended then
     Resume;
   WaitFor;  
 end;
 if FHandle <> 0 then CloseHandle(FHandle);
.....
end;


в D6 так


← →
Alx2 ©   (2004-11-04 09:43) [2]

>Игорь Шевченко ©   (04.11.04 00:28) [1]
Спасибо. Вроде-бы понял, что на верном пути :)



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

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



Память: 0.45 MB
Время: 0.023 c
3-1098259269
NewDelpher
2004-10-20 12:01
2004.11.21
Автоматическое создание пустой базы данных


1-1099585624
heady
2004-11-04 19:27
2004.11.21
выбор папки с кнопкой "создать"


14-1099743026
BoS | Snake
2004-11-06 15:10
2004.11.21
Народ , неед хелп , кто в Lisp шарит...


1-1099835952
sysa
2004-11-07 16:59
2004.11.21
работа с Mathcad


14-1099647423
vecna
2004-11-05 12:37
2004.11.21
Всем плакать от смеха!




   Наверх