5corpio Napisano Sierpień 14, 2012 Zgłoś Share Napisano Sierpień 14, 2012 Tworzę teraz pewną aplikacje w której muszę korzystać z wątków - niestety czyli pomagam sobie do tego klasą TThread. Trochę kombinowałem i chce się upewnić w przekonaniu: Mam klasę swoją opartą o TThread i ustawione w niej: FreeOnTerminate := True. Skasowanie wątku potwierdzam sobie poprzez wrzucenie do destruktora zwykłego np. WriteLn('Skasowano'). Ale teraz zauważyłem, że: Po skasowaniu wątku objekt nie jest ustawiany domyślnie na nil? Bo muszę recznie ustawiać potem objekt na nil pomagając sobie w tym funkcją: WaitForSingleObject i sprawdzać wartość WAIT_OBJECT_0. Ogólnie schemat mam taki: Wątek nadrzędny (działający cały czas)Sprawdzamy czy not Assigned(watek_dziecko) jesli nie to tworzymy ten wątek, który się wykonuje... wykonuje a potem sam się kasuje rzecz jasna. Ale w tym momencie nie jest on ustawiony na nil! Ponieważ przy kolejnym dalszym działaniu wątku głownego sprawdzanie Assigned(Watek_dziecko) daje juz fałsz. Nie cierpię bawienia się w te wątki a potem muszę to rozszerzyć jeszcze nie o jeden a o więcej Więc liczę na jakieś pomysły kogoś czy dobrze rozumuje, że sam muszę się zająć ustawianiem potem stanu objektu na nil? Ew. jak sprawdzacie w jakiś fajny sposób, który wątek np. w tablicy już nie działa? Wiem, że jest WaitForMultiple... ale muszę jeszcze w ogarnąć dokłądnie tą funkcje bo ona chyba sprawdza czy wszystkie są danego stanu. Bo w chwili obecnej moje rozwiązanie działa ale wolałbym mieć wszystko skodzone w miarę ok z racji tego, że z tymi wątkami to nigdy nic nie wiadomo Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Sierpień 29, 2012 Zgłoś Share Napisano Sierpień 29, 2012 Nie do końca rozumiem całość problemu ale możesz chyba zastosować takie coś. Przed uruchomieniem wątku ustaw mu pole z jakimś identyfikatorem (index tablicy albo klucz w mapie czy co tam używasz). Na końcu metody wątku (chyba execute było w TThread) sięgnij do kolekcji która zawiera wątek i usuń go z niej. Inna droga to dodanie listenera do każdego wątka. Listener może być informowany o zmianach stanu np onStart, onEnd i w reakcji na to kasować co potrzeba. Chyba że nic nie skumałem i nie o to chodzi. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
babubabu Napisano Październik 21, 2012 Zgłoś Share Napisano Październik 21, 2012 FreeAndNil(obiekt) Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.