Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Как правильно прекратить работу потока?   Найти похожие ветки 

 
Kolan ©   (2005-07-28 11:44) [0]

Здравствуйте,
 Нашел ошибку у себя, исправить не могу.
Шошибка такая.
1. Я создаю поток
MeasurmentThread := TMeasurmentThread.Create(False, MeasurmentDataRec, Handle);

2. Он делает что ему надо и затем его надо удалить. Удаляю так
 if MeasurmentThread <> nil then
   MeasurmentThread.Terminate;


3. Ошибкак в том что при следующем использовании потока (1).
Указатель на старую его версию теряется.

Значит его надо удалять?

procedure TerminateMeasurmentThread;
begin
 if MeasurmentThread <> nil then
 begin
   MeasurmentThread.Terminate;
   MeasurmentThread.Free;
 end;
end;

Получаю:
Thread Error: Неверный дескриптор (6)

Пробую так:
procedure StartMeasurmentThread(MeasurmentDataRec: PMeasurmentData; Handle: THandle);
begin
 if  Assigned(MeasurmentThread) then
 begin
   MeasurmentThread.Free;
 end;
   MeasurmentThread := TMeasurmentThread.Create(False, MeasurmentDataRec, Handle);
end;

Получаю:

Access violation at address 00403740 in module "KFREGRAF.EXE". Read of address FFFFFFFC

А как надо то?


 
Digitman ©   (2005-07-28 11:55) [1]


> Kolan ©   (28.07.05 11:44)  


св-во FreeOnTerminate явно устанавливаешь ?
если да, то где и какое значение ему присваиваешь ?


 
Kolan ©   (2005-07-28 12:20) [2]

св-во FreeOnTerminate явно устанавливаешь ?
если да, то где и какое значение ему присваиваешь
?

Забsл но вот исправил:

constructor TMeasurmentThread.Create(CreateSuspended: Boolean;
 MeasurmentDataRec: PMeasurmentData; Handle: THandle);
begin
 inherited Create(CreateSuspended);
 FMeasurmentDataRec := MeasurmentDataRec;
 FWindowHandle := Handle;
 FreeOnTerminate := True;
 //MeasurmentThread.OnTerminate := MeasurmentThread.DoTerminate;
end;


После уничтожения(Terminate). Захожу отладчиком в StartMeasurmentThread там
MeasurmentThread
MeasurmentThread: ($10, 76)
те не nil

Благодарю за помощь ШО"б я без вас делал. :)))


 
Digitman ©   (2005-07-28 12:36) [3]


> После уничтожения(Terminate). Захожу отладчиком в StartMeasurmentThread
> там
> MeasurmentThread
> MeasurmentThread: ($10, 76)
> те не nil


а почему там д.б. nil ?

ты записывал в эту переменную nil ? нет, не записывал... Ну так а откуда ж там nil сам по себе возьмется-то ? с Луны что ли свалится ?)


 
Kolan ©   (2005-07-28 12:45) [4]

ты записывал в эту переменную nil ? нет, не записывал... Ну так а откуда ж там nil сам по себе возьмется-то ? с Луны что ли свалится ?)

Те при
FreeOnTerminate := True;
когда я делаю потоку терминате память освобождается? Так. И мне не надо волноваться что я затру указатель на сущ. обект?


 
Digitman ©   (2005-07-28 12:46) [5]

constructor TMeasurmentThread.Create(CreateSuspended: Boolean;
MeasurmentDataRec: PMeasurmentData; Handle: THandle);
begin
inherited Create(True);
FMeasurmentDataRec := MeasurmentDataRec;
FWindowHandle := Handle;
OnTerminate := DoOnTerminate;
if not CreateSuspended then Resume;
end;

procedure TMeasurmentThread.DoOnTerminate(Sender: TObject);
begin
 ShowMessage("Done");
end;

procedure StartMeasurmentThread(MeasurmentDataRec: PMeasurmentData; Handle: THandle);
begin
  MeasurmentThread := TMeasurmentThread.Create(False, MeasurmentDataRec, Handle);
end;

procedure TerminateMeasurmentThread;
begin
 FreeAndNil(MeasurmentThread);
end;

procedure ReStartMeasurmentThread(MeasurmentDataRec: PMeasurmentData; Handle: THandle);
begin
  TerminateMeasurmentThread;
  StartMeasurmentThread(MeasurmentDataRec, Handle);
end;


 
Digitman ©   (2005-07-28 12:48) [6]


> мне не надо волноваться что я затру указатель на сущ. обект?


да, не надо



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
14-1121638929
Andy BitOff
2005-07-18 02:22
2005.08.14
Удивительная клавиатура от Артемия Лебедева. Офигеть!


1-1122471580
vigo
2005-07-27 17:39
2005.08.14
Вопрос по Юлианской дате


4-1119466233
volser
2005-06-22 22:50
2005.08.14
Помогите кто работал с LVM_SORTGROUPS


1-1121423160
Виталька2005
2005-07-15 14:26
2005.08.14
Обработка текста в MaskEdit


14-1121835426
vajo
2005-07-20 08:57
2005.08.14
Помогите выбрать ноутбук