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

Вниз

Работа с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
5-1098864782
Sysa
2004-10-27 12:13
2005.09.11
Как сделать свою кнопку


14-1124348891
vidiv
2005-08-18 11:08
2005.09.11
Самая популярная в мире игра!


14-1124273711
Экспериментатор
2005-08-17 14:15
2005.09.11
$(Delphi) - где присваивается значение этой переменной?


1-1123948940
ArtemESC
2005-08-13 20:02
2005.09.11
Быстрое удаление байта в TMemoryStream


9-1116302618
Slavikk
2005-05-17 08:03
2005.09.11
Редактор карт