Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: 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 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.06 c
14-1099161093
Alein
2004-10-30 22:31
2004.11.21
Года 2-3 назад это было, не помню...


14-1099406558
BlackLord2003
2004-11-02 17:42
2004.11.21
Glyp s


14-1099552719
Fay
2004-11-04 10:18
2004.11.21
Требуется программист


3-1098274766
Overstep
2004-10-20 16:19
2004.11.21
BDE and PDOXUSRS.NET


3-1098525809
Etwas
2004-10-23 14:03
2004.11.21
Выбор записей с помощью CheckBox