![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поясните пожалуйста значение свойства TThread.FreeOnTerminate
Nilman © (2010-02-09 13:45:00)Сразу прошу прощения за глуповатый на мой взгляд вопрос, но сам разобраться не могу!) Как понял из хелпа, свойство FreeOnTerminate автоматически уничтожает созданный мной TThread. Но как-то он у меня не разрушается после завершения потока.. Создал поток:
ScanThread := TScanThread.Create(True);
ScanThread.Priority := tpNormal;
ScanThread.FreeOnTerminate:=True;
ScanThread.OnTerminate:=FOnScanThreadTerminate;
ScanThread.Resume;
После завершения потока, сработало FOnScanThreadTerminate, после этого нажимаю на кнопку, на OnClick которой задано:
if Assigned(ScanThread) then ShowMessage('assigned') else ShowMessage('not assigned');
После завершения потока, нажатие на кнопку отвечает сообщением assigned, а насколько я понял, я должен получать not assigned.. Подскажите пож, что не так делаю?
Nilman (2010-02-09 15:40:00) [1]Спасибо всем, вопрос снят!
Германн (2010-02-09 14:41:00) [2]
> Ega23 © (09.02.10 14:16) [1]
>
>
В оригинале была телефонная книжка.
Ega23 (2010-02-09 14:29:00) [3]
> А что значит моментально? Кнопку с проверкой на Assigned(
> нажимаю не раньше секунды.. Или там вообще не определённое
> время? Если так, то как мне всё таки проверить существует
> ли экземпляр TThread?
Да хоть пицот раз нажимай. Пока ты САМ не изменишь его на nil - за тебя его никто не изменит.
Ну на крайняк - шли нотификацию из треда, мол - мне кирдык, я разрушаюсь.
Nilman (2010-02-09 14:23:00) [4]
> 12 ©
Судя по всему аналогичный, тогда вопрос немного другой, можно ли как нибудь узнать, выделили ли мы память под P, и сделать это без своих каких то доп. переменных?
Nilman (2010-02-09 14:20:00) [5]А что значит моментально? Кнопку с проверкой на Assigned( нажимаю не раньше секунды.. Или там вообще не определённое время? Если так, то как мне всё таки проверить существует ли экземпляр TThread?
12 (2010-02-09 14:18:00) [6]а это не тот случай?
var P: Pointer;
begin
P := nil;
if Assigned (P) then Showmessage ('1');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then Showmessage ('2');
Ega23 (2010-02-09 14:16:00) [7]
> После завершения потока, нажатие на кнопку отвечает сообщением
> assigned, а насколько я понял, я должен получать not assigned.
> . Подскажите пож, что не так делаю?
Вот у тебя есть знакомый. У тебя в блокноте записан его адрес. И вдруг твой знакомый помер. У тебя запись в блокноте исчезнет сама-собой?
У тебя есть указатель на экземпляр класса. Ты вызвал деструктор, память по этому адресу освободилась. Но это не значит, что значение указателя моментально обнулилось.