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

Вниз

Thread Error...   Найти похожие ветки 

 
Makhanev A.S. ©   (2004-03-06 21:29) [0]

Обнаружил конфликт FreeOnTerminate и WaitFor.
Если имеются они оба, то возникает сабж (либо Abstract Error в случае с TThread).

 with TTest.Create(true) do //TTest - наследник TThread
 begin
   FreeOnTerminate := true;
   Resume;  // что происходит в Execute - разцницы нет
   WaitFor;
 end;

Подозреваю, что waitfor попадает на уже освобождённые хэндлы потока...
Но можно ли поконкретнее, почему так оно происсходит (WaitFor попадает в "ловушку"?)?


 
Makhanev A.S. ©   (2004-03-07 09:38) [1]

кто-то же знает?


 
Digitman ©   (2004-03-07 11:33) [2]

Abstract Error не имеет отношения к сабжу - метод Execute класса TThread абстрактный и подлежит обязательному перекрытию в классе-наследнике... ты, очевидно, не создал класс-наследник TThread, а пытался создать непосредственно экз-р TThread, потому при попытке неявного вызова в поточной ф-ции абстрактного метода Execute ты и получил упомянутое исключение

AV ты тоже получил "законно" .. при FreeOnTerminate = True поточная ф-ция, получив управление после завершения метода Execute, еще перед своим завершением вызывает диструктор поточного класса .. если это произошло хоть чуть-чуть раньше, чем другой поток обратился к методу WaitFor, то и удивляться нет повода - произошло обращение к методу уже не существующего объекта, что и вызвало AV



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

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

Наверх




Память: 0.47 MB
Время: 0.052 c
14-1081324648
asm???
2004-04-07 11:57
2004.05.02
Программка на ассемблере


1-1082290014
TIER87
2004-04-18 16:06
2004.05.02
Организация процесса поиска


14-1081104917
konstantinov
2004-04-04 22:55
2004.05.02
Вопрос о жилье и зарплате


3-1081239691
V-A-V
2004-04-06 12:21
2004.05.02
Удаления пароля из БД MsAccess


1-1082092275
Pirate
2004-04-16 09:11
2004.05.02
Сравнение по маске