Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизКак правильно прекратить работу потока? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.016 c