Ubijanie wątku mocniej niż Abort

0

Witam,

W wątku korzystam z zewnętrznej biblioteki, której nie mogę modyfikować. Kod w moim wątku wygląda mniej więcej tak:

try
{
  xxx.run(); // jak widać nie mogę zbytnio wpłynąć na działanie
}
catch (ThreadAbortException)
{
...
}
catch (Exception ex)
{
...
}

w niektórych specyficznych przypadkach zdarza się, że metoda run przechwytuje wyjątek ThreadAbortException przez co ubijanie wątku standardowym Abortem nie zawsze jest możliwe.

Czy istnieje jakiś inny sposób ubicia takiego wątku? Najlpiej jakby po prostu wątek się zakończył jeśli przez 20ms nie zareagował na Aborta.

0

Jedyne co na teraz (a już śpiący jestem) przychodzi mi do głowy, to odpalenie tego w osobnym procesie i ubicie go. Minus taki, że trudniej z komunikacją i synchronizacją.

0

A ta biblioteka nie ma jakiejś cywilizowanej metody do zatrzymania pracy?

0
krwq napisał(a)

Witam,
W wątku korzystam z zewnętrznej biblioteki, której nie mogę modyfikować...

hahaha widzę że nasz kochany proprietary software ma się dobrze i pomaga programistom pisać kod - zero restrykcji rofl.

0

w zasadzie to mogę modyfikować, ale nie chce mi się tego kompilować (zajmuje to sporo czasu w przypadku tej biblioteki) i po prostu zastanawiam się czy jest to możliwe. w winapi ubić można w dowolnym momencie, ale boje się że gdy użyje TerminateThread w zarządzanym kodzie to coś się zepsuje :P

0

W zasadzie nie powinno być wielkiej różnicy pomiędzy ubijaniem z poziomu WinAPI i ubijaniem z poziomu .NETa (o ile jest). W każdym przypadku ubijanie wątków to zuooo, bo system nie bardzo ma jak zwolnić zasobów - wątki mogą współdzielić zasoby, a więc ciężko rozgraniczyć czy można zamknąć zasób przy ubijaniu wątku nie zmieniając semantyki działania całego procesu.

ma w nowej wersji do której jeszcze nie udostępnili skompilowanych binarek - musiałbym ręcznie to cholerstwo kompilować - krwq 52 minuty temu

Zrób prowizorkę w takim razie z TerminateThread, a potem zmień metodę jak zmienisz binarkę. No chyba, że to kod produkcyjny.

0

w tym wypadku można ubić wątek w dowolnym momencie i zwolnić mu wszystko :P te ubijanie wątku nie jest jakieś bardzo ważne, ale od czasu do czasu się przydaje :) za jakiś czas chyba pobawie się po prostu w kompilowanie tego

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