Главная страница
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.023 c
1-1099657062
Hadroran
2004-11-05 15:17
2004.11.21
Zoom for Image


6-1095058553
studentt
2004-09-13 10:55
2004.11.21
Cокеты не дают перезагрузить машину ! (D6,W2k)


1-1099780102
jonni
2004-11-07 01:28
2004.11.21
PopupMenu


14-1099913616
ОлегЪ
2004-11-08 14:33
2004.11.21
Инитересный ресурс


14-1099574409
1C
2004-11-04 16:20
2004.11.21
И объясните, плз, соответствие обозначении...