Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Komunikacija sa Nitima

[es] :: Java :: Komunikacija sa Nitima

[ Pregleda: 3115 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jeremy
igor jeremic
Beograd

Član broj: 3740
Poruke: 73
*.NBS.BG.AC.YU

ICQ: 13289333
Sajt: www.jwork.net


Profil

icon Komunikacija sa Nitima18.08.2003. u 13:00 - pre 258 meseci
Na koji nacin mogu niti koja se izvrsava da posaljem poruku.

konkretno:

imam tackicu koja se seta po ekranu, kontrolisem je sa tasterima levo,desno,gore,dole (tackica se seta u zadatom pravcu, to se odvija u jednoj niti), a sa ovim tasterima samo menjam pravac

applet oslusjuje tastaturu i ako je pritisnut neki od ovih tastera on treba da saopsti niti da promeni pravac kretanja.

Pokusao sam sa jednostavnom metodom nit1.promeni_pravac(pravac) ali mi kompajler to nedozvoljava.

resio sam to na malo glup nacin (u appletu imam staticku promenljivu pravacKretanja) koju menjam pri pritisku na neki taster, a zatim iz niti citam tu promenljivu. to funkcionise ali dolazi do problema kad hocu da imam dve niti.

Pozdrav,
Igor
Igor Jeremic
www.jwork.net
 
Odgovor na temu

Last Man Standing
Misha Kostich
Chicago

Član broj: 3775
Poruke: 101
*.client.attbi.com



+1 Profil

icon Re: Komunikacija sa Nitima20.08.2003. u 13:45 - pre 258 meseci
Mozes to da resis na vise nacina, ali je princip da niti moraju da imaju neke shared objekte, tj. objekte koji su dostupni svim nitima. To sto si uradio nije glupo, ali treba da poboljsas resenje. Problem je relativno jednostavan, zato sto samo jedna nit (ta sto prati tastaturu) menja vrednost, a ona druga (sto pomera tackicu) samo cita, bez ikakvih izmena. Dakle, mozes da koristis i staticki niz, s tim sto svaka tackica mora da zna gde da pogleda za svoj pravac. Ipak, evo ti par stvari o nitima koje su zanimljive kada dve ili vise niti treba da sinhronizuju pristup i komunikaciju.

Deo koda koji pristupa zajednickim objektima se u teoriji (i praksi) zove kriticna sekcija. Taj pristup mora da se sinhronizuje, tako da nema zabune kada dve (ili vise) niti pristupaju (ili menjaju) zajednickom objektu. Sinhronizacija se postize uz pomoc kljucne reci synchronized. Mozes da je stavis oko kriticne sekcije ili pak kada deklarises metod. Onda je ceo metod kriticna sekcija i samo jedan thread moze da izvrsava taj metod u jednom trenutku. Takodje, ako imas dve ili vise kriticne sekcije definisane u klasi, samo jedna nit moze da izvrsava bilo koju od njih (na jednom objektu), a ostale moraju da cekaju na signal da je prva nit zavrsila posao.

Konkretno kod tebe, ako imas jos neku nit koja moze da promeni pravac, mozes da napravis niz koji ce da cuva vrednosti za svaku tackicu i da sinhronizujes u odnosu na aplet ili klasu apleta (napises synchronized(instanca_klase_tvog_apleta){ ...//menjanje vrednosti u nizu za tackice }
Onda svakom objektu klase tackica das njegov index u nizu i sam niz gde ce da gleda za promenu pravca. Aplet je u tvom slucaju zgodan, jer imas tu jednu instancu klase fiksiranu. Inace mozes da koristis singleton pattern ili bilo sta za sta znas da postoji samo jedna instanca klase (na primer Class objekat). Ti objekti koje stavljas u synchronized se zovu monitori i problemi izmedju niti se resavaju serijalizacijom pristupa tim monitorima.

Posto malo zurim, napisao sam ovo zbrda-zdola. Ako ti nije najjasnije, pitaj, pa cu da elaboriram veceras (ili mozda neko drugi ko zna) :)
A computer once beat me at chess, but it was no match for me at kick boxing.
 
Odgovor na temu

jeremy
igor jeremic
Beograd

Član broj: 3740
Poruke: 73
195.250.107.*

ICQ: 13289333
Sajt: www.jwork.net


Profil

icon Re: Komunikacija sa Nitima21.08.2003. u 00:38 - pre 258 meseci
Hvala ti na odgovoru, radio sam pre par meseci sa nitima u C-u (pthread) i to se svodi na isto, zakljucavanje neke globalne promenljive mutex promenljivom. ukoliko postoji mogucnost da joj pristupa vise niti..

Ne znam zasto, verovatno zbog pojma objekata pomislio sam da u Javi mozda to moze drugacije da funkcionise. Tj da ti nekom objektu direktno posaljes poruku. Ustvari kad pogledas interfejs Runnable vidi se da postoje metode tipa stop(), resume().. tako nesto, ali one su proglasene za zastarele

Posto je moj slucaj prost (radio sam seminarski iz programskih jezika) igrica zmije, ja tu imam jedan objekat (zmiju) koja je nit i nemam potrebe za koriscenjem mutex promenljivih niti ikakvu sinhronizaciju (zato sam i razmisljao na pogresan nacin u samom startu) da sam koristio neki drugi jezik verovatno ne bi ni niti koristio za resavanje ovog problema..

Ipak, hvala ti na trudu.
Pozdrav,
Igor
Igor Jeremic
www.jwork.net
 
Odgovor na temu

river
System Architect

Član broj: 12566
Poruke: 62
*.verat.net



+1 Profil

icon Re: Komunikacija sa Nitima27.08.2003. u 00:18 - pre 258 meseci
Meni je samo nejasno kako ti kompajler ne dozvoljava da pozoveš nit1.nekiMetod(pravac);

Ukoliko koristiš applet onda imaš neku klasu u apletu, ili u JPanelu ili nečemu sličnom koja osluškuje tastaturu, i imaš nit. E sada tu nit možeš da napraviš kao implementaciju Runnable interfejsa ili kao extends Thread. U svakom slučaju možeš da dodaš toj klasi koja enkapsulira nit koliko god hoćeš metoda.

Problem kod tebe je verovatno u downcastingu, odnosno ti praviš instancu objekta MyThread a držiš referencu na Thread/Runnable objekat. Jedino u tom slučaju kompajler ne zna ništa o postojanju nekiMetod(pravac) metoda.

Pregledaj source i videćeš da negde imaš problem downcastinga.
Everything should be made as simple as possible, but not simpler. - AA
 
Odgovor na temu

[es] :: Java :: Komunikacija sa Nitima

[ Pregleda: 3115 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.