Ukončení běhu ´zaseknuté´ metody – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Ukončení běhu ´zaseknuté´ metody – Java – Fórum – Programujte.comUkončení běhu ´zaseknuté´ metody – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Bicek0
Newbie
1. 2. 2013   #1
-
0
-

 Mám aplikaci MAIN na testování, která spouští podružné testy T1 - Tx. Ty obsahují metody start() a stop(). V případě, že test Tx spuštěný metodou start() trvá příliš dlouhou nebo se zasekne, mám možnost ho ukončit pomocí metody stop(), kterou test implementuje. Až sem nemám problém, jelikož mám plnou kontrolu nad kódem.

 Problém nastává však v okamžiku, kdy test např. T1 zavolá funkci z externí knihovny (volá fci z externí dll knihovny přes JNI). V případě, že se program zasekne právě tam, nemám možnost test T1 ukončit tak, aby aplikace MAIN zůstala spuštěna a pokud možno měla zprávu o zkolabování T1.

 Rád bych ukončil test Tx který se zasekl v externí funkci, ale nevím jak na to. Napadá vás nějaké řešení?..

Nahlásit jako SPAM
IP: 89.190.73.–
Reklama
Reklama
KIIV+42
God of flame
1. 2. 2013   #2
-
0
-

no jestli to delas pomoci vlaken, tak urcite musi jit vlakno zabit...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bicek0
Newbie
3. 2. 2013   #3
-
0
-

No v podstatě ano. Tento test, který využívá funkce z dll knihovny jsem měl původně jako samostatnou java aplikaci. V ní jsem měl pro tento případ zaseknutí ochraný časovač, který jednoduše zavolal fci System.exit(..); Ovšem pak jsem to zaštítil aplikací MAIN, která tento test linkuje jako knihovnu.jar, vytvoří si objekt TEST a vyvoláním jeho příslušné metody test spustí.
Tím se samozřejmě stalo použití System.exit(..); nepoužitelné, jelikož zabilo i aplikaci MAIN a tak se snažím najít nějaký způsob jak ukončit pouze objekt TEST s jeho seklou dll knihovnou.. zatím bezvýsledně.

Nahlásit jako SPAM
IP: 88.103.221.–
KIIV+42
God of flame
3. 2. 2013   #4
-
0
-

no vlastni vlakno nasilne ukoncit jde... takze main pobezi v hlavnim vlakne, vytvori pracovni a v nem se teprve pusti testy...

pokud test nebude moc dlouho odpovidat tak se proste zabije to jeho vlakno (samozrejme ze ne pomoci System.exit()...)

ale co tak ctu o thread.stop() a to ze je deprecated, tak bude lepsi napsat tu externi libku znova a lip

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bicek0
Newbie
3. 2. 2013   #5
-
0
-

#4 KIIV
No bohuzel ta externi knihovna neni moje a nemám k ní zdrojáky - proto ji nemůžu upravit, takže mi nezbývá než ji prostě nějak zabít.

Nahlásit jako SPAM
IP: 88.103.221.–
Grungy0
Super člen
3. 2. 2013   #6
-
0
-

Ak ti ide iba o detekciu, či process trvá dlho tak využi join s timeoutom.

Ak ho chceš zabiť, tak môžeš skúsiť zavolať interrupt a čakať že niečo vyhodí výnimku InterruptedException, ale ak na to nie je tá externá knižnica pripravená tak sa s tým asi nedá nič robiť.

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
Bicek0
Newbie
3. 2. 2013   #7
-
0
-

#6 Grungy
Myslel jsem si, že když nějak zabiju ten test který tu knihovnu volá, tak spolu s ním zabiju i tu knihovnu.

Nahlásit jako SPAM
IP: 88.103.221.–
Grungy0
Super člen
3. 2. 2013   #8
-
0
-
Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
Bicek0
Newbie
4. 2. 2013   #9
-
0
-

#8 Grungy
Tak ani toto není použitelné. GC uklidí knihovnu a nepotřebné objekty jen v případě, že už jsou opravdu nepotřebné - to bohužel není tento případ, takže tu knihovnu nechá žít.

Pro jistotu jsem to ještě vyzkoušel, ale i když objektu přiřadím null a pak zavolám GC, tak objekt stále žije.

Nahlásit jako SPAM
IP: 89.190.73.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý