kończenie programu przed końcem wątku

kończenie programu przed końcem wątku
AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 62
0

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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

O który system operacyjny chodzi?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

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.

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 62
0

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.