Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
4-1118495702
пользовател ь
2005-06-11 17:15
2005.08.14
ярлыки к *.doc файлам


3-1120564635
alex_***
2005-07-05 15:57
2005.08.14
получить результат выполнения dynamic sql кроме кода ошибки


4-1118683551
ZSergey
2005-06-13 21:25
2005.08.14
Как перехватить запуск программы в проводнике?


3-1120471111
Yurisimus
2005-07-04 13:58
2005.08.14
Верхний регистр в ADOQuery


5-1093256031
atruhin
2004-08-23 14:13
2005.08.14
Orpheus не смог найти хелп





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский