Главная страница
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.045 c
3-1098168155
AleKo
2004-10-19 10:42
2004.11.21
Поведение DBGridEh и DBEditEh


6-1095319344
Vovik
2004-09-16 11:22
2004.11.21
Net News Transport Protocol


14-1099683871
Pat
2004-11-05 22:44
2004.11.21
Помогите определить на чем написана прога


14-1099578751
Alibaba
2004-11-04 17:32
2004.11.21
The Bat


14-1099353829
ДЫМ
2004-11-02 03:03
2004.11.21
Какой installer посоветуете?