Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
14-1124433996
root
2005-08-19 10:46
2005.09.11
Как вести учет дней в shareware


14-1123930162
Kerk
2005-08-13 14:49
2005.09.11
Приделал к кладовке поиск..


8-1113473950
Venom Spawn
2005-04-14 14:19
2005.09.11
Raytracing


2-1123570632
ApollonX100
2005-08-09 10:57
2005.09.11
Округление и модуль?


4-1122033529
KSergey
2005-07-22 15:58
2005.09.11
Как узнать владельца процесса?




   Наверх