Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

Проблема с деструктором потока   Найти похожие ветки 

 
Прохожий   (2003-09-24 12:59) [0]

Мастера, помогите неопытному програмеру найти косяк. Создаю поток он выполняеться, потом вызываю Terminate - выполняеться деструктор, но поток остаёться.
Создаю поток:
constructor P_Thread.CreateIt(перменные );
begin
inherited Create(true);
FreeOnTerminate := true;
// Set reference
Priority:=tpNormal;
Resume; // Continue the thread
while not PostThreadMessage(ThreadId, WM_USER, 0,0) do;

end;


Поток:


procedure SMTP_Thread.Execute;
var
Msg: TMsg;

begin

if WaitForSingleObject(Semaphore, INFINITE)=WAIT_OBJECT_0 then
begin
try
PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE);
……

Код потока
……
finally
ReleaseSemaphore(Semaphore, 1, nil);
end; {end try}

end; {end if}

Terminate;
end;



Деструктор:


destructor P_Thread.Destroy;
begin

.....

inherited Destroy;

end;


Заметил такую штуку: если в код деструктора или перед вызовом Terminate всавить, например, ShowMessage(""), то всё Ok!
Подскажите что не так ?


 
Владислав   (2003-09-24 13:23) [1]

А зачем вообще тебе в Execute нужет Terminate? Поделись соображениями.


 
Прохожий   (2003-09-24 13:44) [2]

Есть условие, по которому процесс закрываеться


 
Digitman   (2003-09-24 13:48) [3]


> Прохожий


Ты хоть удосужился посмотреть в исходниках класса TThread, что конкретно делает метод Terminate ? Прежде чем про "условия" рассуждать ?

Судя по путанице в терминах "процесс" и "поток" - нет, не удосужился.


 
Прохожий   (2003-09-24 13:59) [4]

>Digitman ©
Блин, ну ошибся Я! Ты никогда ничего не путаешь???
Специально для тебя перепишу свою последную фразу так, как она должна была прозвучать:
"Есть условие, по которому ПОТОК закрываеться"


 
panov   (2003-09-24 14:05) [5]

>Прохожий ©

Кто знает, что у тебя творится в потоке...
Кода ведь ни у кого, кроме тебя, нет.


 
Владислав   (2003-09-24 14:06) [6]

> Прохожий © (24.09.03 13:59) [4]

Ну ё моё. Тебе же популярно сказали, что Terminate НЕ НУЖЕН В ТОМ МЕСТЕ.

"но поток остаёться." чт бы это значило? Да, кстати, а проблема то в чем, собственно говоря?


 
Palladin   (2003-09-24 14:09) [7]

а как было интересно определено что он остается?


 
Прохожий   (2003-09-24 14:09) [8]

>Digitman ©
Поясню и про "условие". Поток выполняет подбор параметра. Как только удалось его подобрать - сохраняються данные и поток завершаеться.
И какое отношение это имеет к классу TThread ?


 
Прохожий   (2003-09-24 14:18) [9]

>Palladin ©
а как было интересно определено что он остается?
View - DebugWindow - Threads

>Владислав ©
Да, кстати, а проблема то в чем, собственно говоря?
Проблема в том, что поток не завершаеться. Он просто виснет. Если в код деструктора или перед вызовом Terminate всавить, например, ShowMessage(""), то всё Ok!


 
Digitman   (2003-09-24 15:17) [10]


> Прохожий


> Поток выполняет подбор параметра. Как только удалось его
> подобрать - сохраняються данные и поток завершаеться.


но ты ж сам себе противоречишь !
раз поток завершается, почему ты говоришь, что он "остается" ?

ты вообще о чем ? о поточном VCL-классе TThread или о Win32-поточной функции ? Давай расставляй точки над i...


 
Прохожий   (2003-09-25 10:12) [11]

>Digitman ©
но ты ж сам себе противоречишь !
раз поток завершается, почему ты говоришь, что он "остается" ?


Такова идея, а на практике получаеться то, о чем я говорю. И я имел в виду поточный VCL - класс TThread.

Ещё вопрос. Ты мне предлагал посмотреть исходники класса TThread...Но, как я уже говорил в Делфи у меня маловато опыта. Как это сделать?


 
panov   (2003-09-25 10:15) [12]

Так ты приведешь код Execute или нет?

Твоя проблема кроется в коде, который ты упорно не хочешь показать.


 
Прохожий   (2003-09-25 10:26) [13]

Да в том коде банальные обявления переменных, несколько математических формул и цикл для подбора парамеров и при получении нужной погрешности - сохранение параметров в файл и затем выполняеться Terminate. Всё



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

Форум: "Потрепаться";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-40468
Vladimir
2003-10-02 10:56
2003.10.13
Как определить, содержит ли строка допустимый путь и имя файла


3-40232
Abrams
2003-09-24 09:30
2003.10.13
TClientDataSet


1-40437
Charly
2003-10-02 20:26
2003.10.13
TPageControl -> AllowChange


3-40320
rosl
2003-09-22 09:02
2003.10.13
Перенос данных


3-40318
Игорь Ч
2003-09-22 09:02
2003.10.13
Как работать со справочником из другой программы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский