Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.003 c
2-1325109344
TThread
2011-12-29 01:55
2012.04.22
TPotok_Com.Terminate


2-1325062111
OW
2011-12-28 12:48
2012.04.22
IdTCPServer1Execute(AThread: TIdPeerThread); Какой тут AThread?


15-1324302501
aka
2011-12-19 17:48
2012.04.22
поиск по списку слов.


15-1324326603
Юрий
2011-12-20 00:30
2012.04.22
С днем рождения ! 20 декабря 2011 вторник


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский