Czy ktoś z was wie co dzieje się z systemem jeśli program zakończy działanie i zostawi w użyciu jakieś wątki?
Mam problem z uzyskiwaniem adresu IP z serwera DNS w sposób nie blokujący. Wykorzystuję funkcję getaddrinfo która w sprzyjających warunkach zwraca sterowanie niemal od razu. Niestety czasem mogą wystąpić opóźnienia, a nie chcę blokować działania programu. Umieściłem ją w innym wątku który ma odebrać adres IP i przekazać do wątku głównego. Jednak co się stanie jeśli w trakcie oczekiwania na adres IP użytkownik zamknie apkę? Powinienem zostawić taki wątek w spokoju i niech system sobie z nim radzi czy zabić go za pomocą TerminateThread? Znacie może inną funkcję, którą mogę uzyskać adres serwera? I mam namyśli coś innego niż getaddrinfoex ponieważ nie działa na win 7 i vista.
O który system operacyjny chodzi?
Jednak co się stanie jeśli w trakcie oczekiwania na adres IP użytkownik zamknie apkę?
Nic się nie stanie, zamykany proces wyparowuje z systemu.
Powinienem zostawić taki wątek w spokoju i niech system sobie z nim radzi czy zabić go za pomocą TerminateThread?
Ani jedno ani drugie. Powinno się poinformować dowolnym własnym sposobem wszystkie wątki o tym że mają się zamknąć, wątki się same zamykają a główny czeka i dopiero zamyka program.
Taka jest sytuacja idealna.
Problemem jednak mogą być funkcje blokujące.
Funkcja GetAddrInfoEx działa pod Vistą, ale potrafi działać asynchronicznie dopiero od Windows 8. Trudno.
Dopilnuj by w normalnym przypadku (czyli gdy wątek nie wisi) wszystko było zamykane prawidłowo, a wątek zamyka się od wewnątrz.
W rzadkim przypadku gdy użytkownik akurat zamyka program wątek zostanie ubity automatycznie.
O który system operacyjny chodzi?
Linux i Windows. Jak jest różnica to krótkie wyjaśnienie jaka. Ewentualnie jak jest w jednym z tych systemów.
Ani jedno ani drugie. Powinno się poinformować dowolnym własnym sposobem wszystkie wątki o tym że mają się zamknąć, wątki się same zamykają a główny czeka i dopiero zamyka program.
Taka jest sytuacja idealna.
Tak to prawda tylko, że w skrajnym wypadku będę musiał czekać być może nawet 5s (może więcej w zależności jaki timeout ma funkcja GetAddrInfo).
Jeśli zamykany proces wyparowuje z systemu i nie przeszkadza mu ten jeden wątek to zostawię takie rozwiązanie.