Wątek w bibliotece Dll

0

Cześć wszystkim..
Mam mały problem z moim programem a właściwie z wątkiem znajdującym się w bibliotece dll..
program służy do łączenia się z stronami internetowymi, służą do tego dołączone do niego biblioteki Dll.. aby zabezpieczyć program przed "zawieszeniem" tzn. stanem kiedy program nie odpowiada na żadne komunikaty, podczas łączenia przy pomocy komponentu z pakietu Indy - IdHttp - uruchamiam go w wątku (wątek jest w bibliotece dll..) i tu pojawia się zonk bo kiedy chce zwolnić wątek nic się nie dzieje.. tzn. tak mi się wydaje bo za bardzo nie umiem tego sprawdzić.. jedynie źrodło informacji o uruchomionych wątkach to u mnie windows'owy menadżer zadań..
kiedy "pstrykne" przycisk urachamiający wątek wszystko ładnie się wykonuje ale po jego zakończeniu nie wykonują się polecenia z procedury OnTerminate wątku i na liście ilości uruchomionych wątków ich liczba się nie zmniejsza.. a jak "pstrykne" przycisk kilkanaście razy to tych wątków robi się trochę :-) zwalniają się dopiero po zakończeniu programu.. i tu moje pytanie dlaczego dopiero po jego zakończeniu? i co zrobić żeby zwalniały się po zakończeniu wątku tak jak powinny?

Jeśli ktoś uważa że ten post jest głupi bądź nie zrozumiały to również prosze o tym powiedzieć postaram się bardziej sprecyzować o co mi chodzi lub po prostu zamilknąć i nie zadawać więcej głupich pytań..

z góry wszystkim dziękuję,
Finwe

0

Wątek rozumiesz przez obiekt klasy TThread, czy może korzystasz wyłącznie z Win32 API? Jeśli to pierwsze, to może spróbuj dodać FreeOnTerminate := True na początku metody Execute.

0

Zamiast IdHttp , użyj THTTPget - nie będziesz musiał nic umieszczać w wątkach.
No i nawet przy duzych zwieszkach netu Twój program będzie stabilny i nie zrobi zwiechy.

0

Wczoraj próbowałem jeszcze umieścić jakikolwiek wątek wewnątrz biblioteki (klasę TThread ;) ) w moim konstruktorze było:

inherited Create(False);
FreeOnTerminate := True;
OnTerminate := MyOnTerminate; 

i nadal procedura OnTerminate nie została wykonana, a w Menadżerze Zadań ilość wątków nie zmniejszyła się po zakończeniu wykonywania wątku.. dodam jeszcze, że ten sam wątek wewnątrz programu (a nie w bibliotece) działał prawidłowo.

Spróbuje poszukać tego THTTPGet.. :) dzięki

0

Bo to jest właśnie jeden z przypadków, w których kontruktor powinien być przedefiniowany mniej więcej tak:

FreeOnTerminate := True;
OnTerminate := MyOnTerminate;
inherited Create(False);
0

Dziś wieczorem, jeśli będę miał czas to sprawdzę czy to zadziała i napiszę :-)
dzięki

Sprawdziłem.. i nie działa... nadal nie wykonują się polecenia w zdarzeniu OnTerminate i nadal nie zwalniają się wątki (tak przynajmniej pokazuje Menadżer Zadań)

Znalazłem coś nowego (jak dla mnie :)) ..TIdThreadComponent.. ale wypróbuje to jutro bo dziś już mi się nie chce :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1