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

Вниз

Работа с TThread   Найти похожие ветки 

 
Helen   (2005-08-17 14:26) [0]

Добрый день. Подскажите что не так делаю. В приложении создается поток, обращается к компоненту Memo через Synchronize. когда я пытаюся прервать поток (Terminate), выдается ошибка:
Code 6: Неверный дискриптор


 
Digitman ©   (2005-08-17 14:30) [1]


> когда я пытаюся прервать поток (Terminate), выдается ошибка:
> Code 6: Неверный дискриптор


не рассказывай небылицы.

при вызове метода Thread.Terminate подобное исключение не возникнет НИКОГДА.


 
Anatoly ©   (2005-08-17 14:31) [2]

А можно взглянуть на код. Вообще Terminate надо делать, когда поток остановлен (Suspend)


 
Reindeer Moss Eater ©   (2005-08-17 14:33) [3]

>Вообще Terminate надо делать, когда поток остановлен (Suspend)

Никакой разницы нет когда это надо делать.


 
Helen   (2005-08-17 14:35) [4]

Небылицы или нет - незнаю. Но факт остается. Нажимаю Button по которой выполняется
ThreadLoadManual.Terminate;
   ThreadLoadManual.Free;
   ThreadLoadManual := nil;

после чего программа думает-думает и выдает вышеописанное исключение.


 
Helen   (2005-08-17 14:36) [5]

Небылицы или нет - незнаю. Но факт остается. Нажимаю Button по которой выполняется
ThreadLoadManual.Terminate;
   ThreadLoadManual.Free;
   ThreadLoadManual := nil;

после чего программа думает-думает и выдает вышеописанное исключение.


 
Reindeer Moss Eater ©   (2005-08-17 14:39) [6]

У тебя видимо FreeOnTerminate = True;
И ошибка возникает на ThreadLoadManual.Free;


 
MBo ©   (2005-08-17 14:41) [7]

FreeOnTerminate как установлено?


 
Leonid Troyanovsky ©   (2005-08-17 14:41) [8]


> Helen   (17.08.05 14:36) [5]
> Небылицы или нет - незнаю. Но факт остается. Нажимаю Button
> по которой выполняется
> ThreadLoadManual.Terminate;
>    ThreadLoadManual.Free;


Free и так делает Terminate.
Однако, интересовал код потока.
Хотя, и сейчас можно сказать, что Syncronize при
обращении к мемо не очень нужен, достаточно Perform.

--
Regards, LVT.


 
Digitman ©   (2005-08-17 14:48) [9]


> Helen   (17.08.05 14:35) [4]
> Небылицы или нет - незнаю


а надо бы знать.


> факт остается


факт того, что при выполнении ИМЕЕННО ЭТОЙ строчки

ThreadLoadManual.Terminate

а не какой-либо иной, тобой выдуман.


 
Dimous ©   (2005-08-17 14:52) [10]

Если FreeOnTerminate = False, тогда ThreadLoadManual.Free лишнее. В противном случае необходимо дождаться завершения потока (например, используя WaitFor) и только после этого вызывать его деструктор...


 
Digitman ©   (2005-08-17 14:54) [11]


> Dimous ©   (17.08.05 14:52) [10]


неверно.


 
Dimous ©   (2005-08-17 14:57) [12]


> Digitman

А что не так?


 
Digitman ©   (2005-08-17 15:02) [13]


> Dimous ©   (17.08.05 14:57) [12]


> что не так?


> Если FreeOnTerminate = False, тогда ThreadLoadManual.Free
> лишнее


Если нет АВТО разрушения объекта, то кто должен в этом случае вызвать явный TThread.Free ? Пушкин ?


 
Dimous ©   (2005-08-17 15:08) [14]

Извиняюсь... конечно же наоборот, в сообщении [10] вместо "Если FreeOnTerminate = False, то..." нужно "Если FreeOnTerminate = True, то..."


 
Digitman ©   (2005-08-17 15:13) [15]


> нужно "Если FreeOnTerminate = True, то..."


тогда становятся необязательными условия в последующих утверждених, а именно


> необходимо дождаться завершения потока (например, используя
> WaitFor) и только после этого вызывать его деструктор


в томи самом "противном случае" (т.е. FreeOnTerminate=False) достаточно вызвать TThread.Free.. конечно же при условии, что состояние уничтожаемого объекта (непосредственно перед его уничтожением) не интересует.


 
Helen   (2005-08-17 15:19) [16]

Спасибо, действительно FreeOnTerminate было True.


 
Digitman ©   (2005-08-17 15:23) [17]


> Helen   (17.08.05 15:19) [16]


> FreeOnTerminate было True


надо понимать, True было присвоено этому св-ву от балды ?
или были осознанные мотивы ?



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

Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
14-1123908241
Гость1
2005-08-13 08:44
2005.09.11
pdf редактирование


2-1123579608
rolex
2005-08-09 13:26
2005.09.11
Во всех формах нужно объявлять DecimalSeparator?


14-1124036317
SoftX
2005-08-14 20:18
2005.09.11
Коммунизм тоже религия.


14-1124182069
Santrope
2005-08-16 12:47
2005.09.11
Что лучше RAID-5 или RAID-10 ?


1-1124737726
Yozch1
2005-08-22 23:08
2005.09.11
Сохранение данных в VirtualTreeView





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