Sada je: 18 tra 2024, 07:43.
C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Evo trebam za faks napraviti mali programčić koji će demonstrirati multithreading i zapeo sam sa "blokadom korisničkog sučelja", iz glavne klase/razreda/forme pozovem 2 nova threada, jedan koji odrađuje kopiranje i jedan koji prikazuje napredak (odvojeni su jer sam isprva mislio da ću time riješiti problem) i tako ovaj što kopira proslijeđuje napredak ovome što ga prikazuje u progressbaru ali tu se javlja i problem, doklegod ovaj što prikazuje napredak dobiva podatak o napretku UI je blokiran i ne mogu ni prekinuti niti ništa, profesor je na predavanju pokazao jednu naredbu (koju sam zaboravio i evo već drugi dan je ne nalazim na netu) koja je ako se ne varam ugrađena u API i daje UI-u prioritet nad nekom zadaćom pa dok se recimo pomiče prozor zadaća koja se obavlja je na čekanju dok se ne prestane micati a to bi meni sada jako dobro došlo jer bi mogao koristiti UI (samo pomicanje i "Cancel" u mom slučaju) dok se kopiranje odrađuje, da, napredak ne bi bio prikazan tijekom korištenja UI elemenata ali nije niti bitno, nakon pomicanja bi progressbar samo skočio na odgovarajuću poziciju o vrijednosti a druga kontrola je "Cancel" button koji ionako treba prekinuti radnju tako da je to ok. Šaljem link programa, ali još je dosta nedovršen pa ako tko može i voljan je pomoći neka se usredotoči na taj dio. I program mora koristiti thread umjesto backgroundworkera (Backgroundworker je izvrsno radio ali ne, kaže mora baš thread biti).
Link za download projekta:
https://www.dropbox.com/s/puvzkoiimsmej ... Thread.zip
I don't want to be a human. I want to see gamma rays, I want to hear x-rays and I want to smell dark matter. I want to reach out with something other than this prehensile paws and feel the solar wind of a super nova flowing over me.
Avatar
Postovi: 1975
Postovi: 1975
Pridružen/a: 19 srp 2011, 22:39
Lokacija: wonderland
Podijelio/la zahvalu: 8 puta
Primio/la zahvalu: 38 puta
Spol: M
OS: Debian 7 Wheezy
Nisam bas gledal kod, al zvuci mi ko da ti fali osnovni princip visedretvenog programiranja sa zajednickim resursima. Semafori i mutexi.

Ak imas dretve koje djele resurse, onda u slucaju kada jedna dretva cita di druga pise, ili obje piseju na isto mjesto moras sve dretve osim jedne blokirati. Kad jedna dretva obavi svoj posao nad zajednickim resursom, propustis drugu dretvu da radi nad tim resursom.

Kak se radi visedretvenost u c# ne znam tocno, al zvuci mi ko da je ovo problem.
stefan je napisao/la:tu mač gemišta

To understand recursion, you must first understand recursion.
Avatar
Postovi: 1536
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Lokacija: ForHill Croatia
Podijelio/la zahvalu: 20 puta
Primio/la zahvalu: 26 puta
Spol: M
OS: eOS Luna
Medojedni jazavac je napisao/la:Nisam bas gledal kod, al zvuci mi ko da ti fali osnovni princip visedretvenog programiranja sa zajednickim resursima. Semafori i mutexi.

Ak imas dretve koje djele resurse, onda u slucaju kada jedna dretva cita di druga pise, ili obje piseju na isto mjesto moras sve dretve osim jedne blokirati. Kad jedna dretva obavi svoj posao nad zajednickim resursom, propustis drugu dretvu da radi nad tim resursom.

Kak se radi visedretvenost u c# ne znam tocno, al zvuci mi ko da je ovo problem.

A dali bi pomoglo korištenje referenci/pokazivača umjesto semafora/mutexa? Manje posla bi bilo :-D
I don't want to be a human. I want to see gamma rays, I want to hear x-rays and I want to smell dark matter. I want to reach out with something other than this prehensile paws and feel the solar wind of a super nova flowing over me.
Avatar
Postovi: 1975
Postovi: 1975
Pridružen/a: 19 srp 2011, 22:39
Lokacija: wonderland
Podijelio/la zahvalu: 8 puta
Primio/la zahvalu: 38 puta
Spol: M
OS: Debian 7 Wheezy
Ne znam kak to mislis tocno, ali izbjegavanje blokiranja dretvi vodi greskama i losa je praksa visedretvenog programiranja.

Pravilo je: Ako postoji resurs koji dretve djele, i bar jedna od dretvi pise u taj resurs, dok jedna dretva obavlja posao nad resursom sve ostale dretve moraju cekati svoj red nad resursom, odnosno bivaju blokirane.

Za to sluze semafori. Postoje opci i binarni semafori. Na linuxu posix semafori su svi opci jer se preko opceg moze prikazat binaran.

Tebi je dovoljan binarni, cini mi se.

Ako bi imao vise resursa koje jedna dretva koristi, u tom slucaju koristis mutexe jer oni omogucavaju jednostavnije zauzimanje vise resursa(semafori u nekim slucajevima mogu dovesti do greske, poznatije pod imenom "Problem filozofa"). Not otom potom. Ak hoces, kad ulovim vremena mogu napisat jednostavni tutorial za semafore i mutexe na linuxu, al ne mogu obecati da to bude ubrzo.
stefan je napisao/la:tu mač gemišta

To understand recursion, you must first understand recursion.
Avatar
Postovi: 1536
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Lokacija: ForHill Croatia
Podijelio/la zahvalu: 20 puta
Primio/la zahvalu: 26 puta
Spol: M
OS: eOS Luna
Ma to je riješeno, koristio sam onaj nesretni Application.DoEvents() ali sam ga lijepo upakirao da ne ometa normalan rad programa, korištenje iste varijable je naravno riješeno tako što je ta varijabla "volatile" i dijelovi na kojima se pristupa toj varijabli su lockani tako da to nije problem, ALI javio se novi problem, a taj je da se thread koji obavlja kopiranje neda prekinuti.

Probao sam razna riješenja sa bespuća interneta ali ništa dosad nije pomoglo, probao sam Abort(), interupt -> wait -> abort, while (neki bool) {kopiranje} i ne da se, dok se ne završi kopiranje gad se neda prekinuti (u pitanju je button "Cancel" jel) i kad se sve zatvori on ostaje u pozadini odraditi svoj posao kopiranja.

Updatan program: https://www.dropbox.com/s/puvzkoiimsmej ... Thread.zip
I don't want to be a human. I want to see gamma rays, I want to hear x-rays and I want to smell dark matter. I want to reach out with something other than this prehensile paws and feel the solar wind of a super nova flowing over me.
Avatar
Postovi: 1975
Postovi: 1975
Pridružen/a: 19 srp 2011, 22:39
Lokacija: wonderland
Podijelio/la zahvalu: 8 puta
Primio/la zahvalu: 38 puta
Spol: M
OS: Debian 7 Wheezy

Na mreži
Trenutno korisnika/ca: / i 12 gostiju.