Форум: "KOL";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизThreadTerminate Найти похожие ветки
← →
vampir_infernal (2007-03-12 09:54) [0]Злравствуйте, уважаемые.
Матчасть: D2005, WinXP SP2, KOL 2.54
Проблема: создаю поток функцией вида:
function NewMyThread( ACreateSuspended: boolean ): PMyThread;
begin
New( Result, Create );
Result.FStopped := ACreateSuspended;
Result.FSuspended := true;
Result.FHandle := CreateThread( nil, 0, @ThreadFuncP, Result,
CREATE_SUSPENDED,
Result.FThreadID );
Result.FOnExecute := Result.DoExecuteMyThread;
end;
Все проходит хорошо, но при вызове Terminate выполнение доходит до строчки TerminateThread(FHandle, 0); в модуле KOL.pas и следующая за ней строчка не выполняется. В программе используются несколько потоков, с остальными все в порядке. Тип MyThread наследуется от TThread. В дебаггере смотрел, хэндл нормальный, не нулевой. Создаются другие потоки такой же функцией, отличающейся лишь управляющей процедурой ThreadFunc и типом результата (тоже наследники от TThread).
Вопрос: как создать поток, который потом корректно уничтожится с помощью TerminateThread?
← →
Vladimir Kladov (2007-03-12 15:23) [1]TerminateThread не может уничтожить поток корректоно по определению. Корректное завершение потока возможно только в результате выхода из OnExecute как из процедуры.
← →
vampir_infernal (2007-03-12 22:45) [2]перефразирую вопрос: почему TerminateThread в каких-то случаях нормально срабатывает, а в каких-то (в моем например) не возвращает управления в вызвавшую процедуру?
← →
Vladimir Kladov (2007-03-13 17:27) [3]Может, из самого потока вызов был?
← →
vampir_infernal (2007-03-13 17:57) [4]Да, так и было. В этом и была причина. Спасибо.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.049 c