Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.046 c