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

predavanje metode pthread_create

[es] :: C/C++ programiranje :: predavanje metode pthread_create

[ Pregleda: 2534 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.tu-graz.ac.at.



Profil

icon predavanje metode pthread_create26.11.2006. u 13:59 - pre 211 meseci
zdravo,

imam mali problem. naime, dosad nisam nikako radio sa multithreading aplikacijama, a sad moram bas jednu takvu napisati. google-ao sam malo i nasao nekoliko primjera koji su ok. moj problem je da sam napisao server koji treba primati zahtjeve klijenata i poslati im response. dakle imam klasu server koja ima metode init(), connect, listen, accept, response... e sad, unutar moje runServerLoop metode ja cekam i prihvatam konekcije i nakon sto dodje request treba da pozovem funkciju pthread_create i da joj predam parametre koji vec odgovaraju. vazno je reci da je ova funkcija unutar moje klase Thread. dakle, napravim novi objekt Thread, pozovem metodu createNewThread i njoj predajem argumente koji se dalje prosljedjuju na pthread_create funkciju koja je unutar ove metode. kako mogu predati svoju metodu response iz Server klase ovoj metodi. pokusao sam, ali kaze da ova mora biti staticna, kad sam to uradio kaze da ne moze obradjivati atribute bez instance, sto je i logicno. ti atributi su zapravo conn_fd, client_address i client_len koje mi trebaju u metodi response. nadam se da nisam previse zakomplikovao sa objasnjenjem :-). mali primjer nebi bilo lose ili par linkova. hvala.

poz,
erno
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: predavanje metode pthread_create26.11.2006. u 20:12 - pre 211 meseci
Na stranu što ti strategija nije dobra (nov thread za svakog klijenta), u principu nešto ovako rešava tvoj problem:

Kreiraj slobodnu funkciju run, ovako nekako

Code:

void run (void* obj) 
{
  server* srv = reinterpret_cast<server*>(obj);
  srv->response();
}


Kad potzoveš pthread_create, prosledi tu funkciju kao pretposlednji parametar, a this kao poslednji i to je u principu to.

Ili još bolje, nađi neku gotovu C++ biblioteku za threading umesto da se gnjaviš pthreads-ima.
 
Odgovor na temu

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.tu-graz.ac.at.



Profil

icon Re: predavanje metode pthread_create27.11.2006. u 13:39 - pre 211 meseci
thnx.

Citat:


Na stranu što ti strategija nije dobra (nov thread za svakog klijenta), u principu nešto ovako rešava tvoj problem:



to se trazi od mene. rado primam savjete ;-) pa...

Citat:


Kad potzoveš pthread_create, prosledi tu funkciju kao pretposlednji parametar, a this kao poslednji i to je u principu to.

Ili još bolje, nađi neku gotovu C++ biblioteku za threading umesto da se gnjaviš pthreads-ima.



ne smijem koristiti "gotove" biblioteke ;-).

hvala jos jednom i pozdrav. morat cu ovo isprobati pa se javim ako zapne.
 
Odgovor na temu

Mr. NiceGuy
Hrvatska, Vukovar

Član broj: 116005
Poruke: 10
*.adsl.net.t-com.hr.



+1 Profil

icon Re: predavanje metode pthread_create12.03.2007. u 19:59 - pre 208 meseci
Izvadio sam ovu temu iz "naftalina" jer sam zainteresiran za doslovce istu stvar kao i erno.

Citat:
Na stranu što ti strategija nije dobra (nov thread za svakog klijenta)

Da li bi mogao ukratko objasniti zašto stvaranje nove niti za svakog klijenta ne valja?


@erno:
Ako ti nije teško (i ako nije tajna), izbaci što si napravio.
I just hate to be pushed around by some fucking machine.

-- Ken Thompson
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.paws.umds.ac.uk.

Sajt: dejan.lekic.org


+2 Profil

icon Re: predavanje metode pthread_create16.03.2007. u 20:20 - pre 208 meseci
erno, kao sto Nemanja rece, to ti nije bas najbolji koncept... Ljudi najcesce prave odgovarajuci "thread pool" (ograniceni broj niti koje opsluzuju konekcije) i kada se konekcija napravi (accept() vrati socket) niti se obaveste da je server prihvatio novu konekciju koja treba da se opsluzi. Uglavnom u POSIX svetu ljudi koriste pthread_cond_*() funkcije za ovo, pre svega pthread_cond_wait() (za cekanje na signal da postoji nova konekcija) and pthread_cond_signal() (za signaliranje da postoji nova konekcija).
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.tu-graz.ac.at.



Profil

icon Re: predavanje metode pthread_create20.03.2007. u 14:48 - pre 207 meseci
@leka

kako sam odmah na pocetku rekao nisam radio sa multithreading programiranjem do tad, tako da sam se bio malo izgubio u svemu tome. previse informacija, premalo vremena -> rezultat = shit :-). barem sam skontao neke stvari o pthread_* funkcijama. iskreno, pokusat cu ovo zaobilaziti ubuduce.

@Mr. NiceGuy

ja sam morao ovako realizovati: chat i game (neka jednostava) aplikacija zajedno, za svakog klijenta novi thread jer su trazili tako. osim toga nisam smio koristiti nikakvu extra biblioteku koja bi mi olaksala rad s threadovima.

poz

 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: predavanje metode pthread_create09.04.2007. u 01:15 - pre 207 meseci
Mozete li neko malo pojasniti zbog cega nevalja svakoj konekciji dati svoju nit? Da li zbog performansi aplikacije ili
je nesto drugo u pitanju?
Meni dosta ljepse izgleda da svakoj konekciji podarim nit, nego da koristim funkciju select.
select() mi nekako divlje izgleda.
 
Odgovor na temu

[es] :: C/C++ programiranje :: predavanje metode pthread_create

[ Pregleda: 2534 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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