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

Вниз

TPotok_Com.Terminate   Найти похожие ветки 

 
TThread   (2011-12-29 01:55) [0]

Приветствую всех!
Подскажите ответ на такой вопрос
останавливаю поток
вот таким кодом

TPotok_Com.Terminate

далее запускаю процедуру

if (not Assigned(TPotok_Com)) then
 Begin
  TPotok_Com := TPotok.Create(False);
  TPotok_Com.FreeOnTerminate := True;
  TPotok_Com.Priority        := tpLower;
  TPotok_Com.Resume;
 End;

Но TPotok_Com - почему то Assigned

И он его соответсвенно заново не создаёт.Мастера, подскажите что делаю не так?


 
RWolf ©   (2011-12-29 02:07) [1]

Assigned — это всего лишь проверка указателя на <>nil.
При уничтожении объекта указатель на него не обнуляется, так что условие не сработает.
Поток останавливают так:


thread.Terminate; //предлагаем потоку остановиться
thread.WaitFor;    //ждём, пока поток соизволит отреагировать


 
vegarulez   (2011-12-29 02:09) [2]

а как тогда потом указатель очистить?

мне же надо убедится что он действительно убит? чтобы второй такой же не создать? или я неправ?


 
KilkennyCat ©   (2011-12-29 02:10) [3]


> И он его соответсвенно заново не создаёт

конечно. он же не уничтожен. уничтожить - Free (полезно прочитать еще про FreeOnTerminate)
> Мастера, подскажите что делаю не так?

что обычно - не прочитал справку.


 
RWolf ©   (2011-12-29 02:11) [4]

после возврата из WaitFor поток, очевидно, прекратил своё выполнение, вне зависимости от того, уничтожен его объект или нет.


 
Германн ©   (2011-12-29 02:12) [5]


> Но TPotok_Com - почему то Assigned
>

А почему и с какого перепугу он должен  быть не Assigned?
Ну когда же вы начнёте читать? Хотя бы учебники.
Free всего лишь отвечает за освобождение памяти, которую занял экземпляр класса. А функция Assigned всего лишь проверяет на ноль/nil указатель на тот самый экземпляр. А кто её будет обнулять? Пушкин или Гоголь?


 
Германн ©   (2011-12-29 02:14) [6]


>  vegarulez   (29.12.11 02:09) [2]
>
> а как тогда потом указатель очистить?
>

А зачем вмешиваться со своими вопросами в чужой топик?


 
vegarulez   (2011-12-29 02:18) [7]

2 KilkennyCat ©   (29.12.11 02:10) [3]
FreeOnTerminate:=True
По идее же должен очиститься?

2 RWolf ©   (29.12.11 02:11) [4]
Waitfor вообще ощибку выдает - Tthread Error: Неверный дескриптор (6)

2 Германн ©   (29.12.11 02:12) [5]
Подскажите пожалуйста как очистить указатель на экземпляр?


 
vegarulez   (2011-12-29 02:19) [8]

Германн ©   (29.12.11 02:14) [6]
Топик мой - просто с рабочего компа написал.
Логин подписал уже в коментах к нему.


 
Германн ©   (2011-12-29 02:25) [9]


> 2 Германн ©   (29.12.11 02:12) [5]
> Подскажите пожалуйста как очистить указатель на экземпляр?
>
>


> останавливаю поток
> вот таким кодом
>
> TPotok_Com.Terminate

TPotok_Com:=nil.


 
RWolf ©   (2011-12-29 02:32) [10]


>
> Waitfor вообще ощибку выдает -



> FreeOnTerminate:=True

вот потому и выдаёт, что уничтожается сразу после завершения.


 
vegarulez   (2011-12-29 02:32) [11]

Германн ©   (29.12.11 02:25) [9]

Спасибо. Заработало.

Почитал про TThread - насторожил момент про WaitFor который у меня почему-то выдаёт ошибку.
Просто если вдруг потоку будет дана команда на остановку

TPotok_Com.Terminate
TPotok_Com:=nil

но он ещё не закончит свою работу - а я его уже следом процедурой вызываю опять.
Подскажите как сделать правильно WaitFor - чтобы дождаться его 100% завершения и только потом переходить на процедуру запуска?


 
vegarulez   (2011-12-29 02:34) [12]

2 RWolf ©   (29.12.11 02:32) [10]

Ок - сейчас попробую исправить, то что написал в vegarulez   (29.12.11 02:32) [11]


 
Германн ©   (2011-12-29 02:40) [13]


> vegarulez   (29.12.11 02:32) [11]
>
> Германн ©   (29.12.11 02:25) [9]
>
> Спасибо. Заработало.
>

Совет номер раз. Используй только один ник в своём
вопросе. Иначе трудно отвечать на "твои" вопросы.


 
vegarulez   (2011-12-29 02:47) [14]

vegarulez   (29.12.11 02:19) [8]

На домашнем компе просто ник сразу вставляется - на рабочем - нет.


 
vegarulez   (2011-12-29 03:00) [15]

RWolf ©   (29.12.11 02:32) [10]

Ок - заработало.
Мастера - спасибо за помощь!


 
KilkennyCat ©   (2011-12-29 03:01) [16]


> На домашнем компе просто ник сразу вставляется - на рабочем
> - нет.

ночью - одна, днем - другая (с) Шрек



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

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

Наверх




Память: 0.5 MB
Время: 0.006 c
15-1324240202
Юрий
2011-12-19 00:30
2012.04.22
С днем рождения ! 19 декабря 2011 понедельник


2-1325179999
Антоха_М
2011-12-29 21:33
2012.04.22
Печать чеков из приложения Delphi


2-1325060038
ply
2011-12-28 12:13
2012.04.22
Присвоить массив


15-1323898980
ffff
2011-12-15 01:43
2012.04.22
Напомните, плиз, о гениальных изобретениях ближайшего прошлого :)


15-1324153802
Юрий
2011-12-18 00:30
2012.04.22
С днем рождения ! 18 декабря 2011 воскресенье