Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 21 odgovor
  • 6.647 pregleda

Najnovija ↓

C++ Builder MultiThrading 11.07.2012. u 20:42 · pre 174 meseca #1
Razmišljam ali nikako da osmislim nekakav pametni primjer zadatka kojeg bi postavio pred studente a da uključuje korištenje thredova tj. paralelni rad, a nakon toga i nadogradnju tog zadatka na korištenje kritične sekcije...... ideje?
Re: C++ Builder MultiThrading 12.07.2012. u 09:09 · pre 174 meseca #2
Prvi deo je kad imaš unapred sve podatke koje treba obraditi, pa se podaci podele među nitima tako da svaka nit ima otprilike istu količinu posla. Nezgodacija je što moraš za svaku nit unapred da odrediš količinu posla. Zato sledi drugi deo u kome se podaci ne raspodeljuju po nitima unapred, nego stoje na jednom mestu, a svaka nit kad postane slobodna uzme novi podatak za obradu. Za ovo konkurentno preuzimanje podataka treba ti kritična sekcija.
Re: C++ Builder MultiThrading 12.07.2012. u 09:27 · pre 174 meseca #3
Napravi vise tredeova koji nesto citaju i upisuju u neki njima zajednicki niz .
Potpis
Viva lollapalooza
Re: C++ Builder MultiThrading 12.07.2012. u 09:34 · pre 174 meseca #4
Cilj je da se prvo napravi jedno rešenje sa nitima koje nema kritične sekcije, a onda da se uvede promena zbog koje je neophodno uvesti i kritične sekcije.
Re: C++ Builder MultiThrading 12.07.2012. u 09:48 · pre 174 meseca #5
Obrada poruka iz bazena poruka, gde svaka nit uzima po jednu poruku iz bazena, uklanja je iz bazena (ovo dvoje mora biti u jednoj sekciji zaštićenoj mjuteksom), a onda je obrađuje, moguće šaljući novu poruku u pazen (ubacivanje mora biti u sekciji zaštićenoj istim tim mjuteksom bazena poruka). Dalje, treba pomoću kritičnih sekcija napraviti klasu mjuteks.

Druga varijanta je da se vađenje iz bazena poruka i stavljanje poruke u njega radi jednoj funkciji koja je zaštićena kritičnom sekcijom.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: C++ Builder MultiThrading 12.07.2012. u 09:50 · pre 174 meseca #6
Ok. Ajd' ovako mozda neki primer :
1. bez kriticnih sekcija - svaki thread odradjuje neku racunsku operaciju (npr. izracunava faktorijel od random broja) i ispisuje ga na ekran ako pretpostavimo da je printf thread safe
2. sa kriticnom sekcijom - svaki thread izvrsava istu gore navedenu operaciju sa ulazom koji je rezultat prethodnog threada upisanog u niz, a rezultat smesta isto u niz koji ce procitati sledeci thread.

Za pocetak setovati vrednosti niza na neke proizvoljne non- null vrednosti a bi rezultatii imali smisla.
Moze neka druga racunska operacija data kao primer jer ce faktorijel brzo da ode u beskonacnost .

Potpis
Viva lollapalooza
Re: C++ Builder MultiThrading 12.07.2012. u 09:54 · pre 174 meseca #7
Temeljna ideja je da se obrade thredovi a svakako bi bilo dobro dodati i kritičnu sekciju. Ono što bi bilo idealno jest da primjer bude vizualan pošto se radi u C++ Builderu, i to je ono što me najviše muči. Da nema kritične sekcije dao bi im da naprave npr. nekakav download manager koji iz listbox-a pokupi linkove koje treba skinuti, te za svaki link kreira poseban thread koji radi download tog linka (sadržaja). No teško mi smisliti onda gdje dodati kritičnu sekciju. Dodati ću i mutex ali to nije problem - npr. moraju napraviti da aplikacija ne smije dozvoliti višestruke instance.
Re: C++ Builder MultiThrading 12.07.2012. u 10:04 · pre 174 meseca #8
Citat:

Da nema kritične sekcije dao bi im da naprave npr. nekakav download manager koji iz listbox-a pokupi linkove koje treba skinuti, te za svaki link kreira poseban thread koji radi download tog linka (sadržaja).
No teško mi smisliti onda gdje dodati kritičnu sekciju.

Pa nek svi donwload-uju i upisuju sadrzaj u jedan fajl. Tu ce morati da se odradi sinhronizacija .
A prvi primer bez kriticne sekcije nek svaki tred downloaduje u svoj poseban fajl .
Potpis
Viva lollapalooza
Re: C++ Builder MultiThrading 12.07.2012. u 10:08 · pre 174 meseca #9
Možda ovako: Svaki thread downloada u različiti fajl ali svi threadovi zajednički updataju isti ProgressBar koji prikazuje status svih downloada.
Re: C++ Builder MultiThrading 12.07.2012. u 10:13 · pre 174 meseca #10
VCL nije threadsafe. Barem nekada nije bio, ne znam sta se sada desava.

To znači da ako svaki taj download thread želi da upiše informaciju da je završio posao u neku zajedničku listu (TStringList, TListBox, i sl.) trebalo bi da imaš kritičnu sekciju za upis (Add, Insert) tog podatka. Tu možeš upotrebiti kritične sekcije.

A kada koristiš kritične sekcije, uvek je dobra ideja upariti ih s RAII-jem:
http://www.elitesecurity.org/t...esign-pattern-za-thread-safety

Re: C++ Builder MultiThrading 12.07.2012. u 10:13 · pre 174 meseca #11
Pazi samo posto VCL NIJE thread safe (osim poneke komponente ali neke nisu uopste, neke nisu skroz... neke jesu)
Nemoj im zadati zadatak gde ce im se naci neka prepreka u vidu sinhronizacije VCL-a za koji ne znaju.
Re: C++ Builder MultiThrading 12.07.2012. u 10:27 · pre 174 meseca #12
Da. Svakako. Nisam ja zaboravio na Synchronize pri updateanju GUI-ja. Samo sam se htio fokusirati na ovako nešto:

CRITICAL_SECTION g_cs;
InitializeCriticalSection(&g_cs);
// …
EnterCriticalSection(&g_cs); // zaključaj CS
// …
LeaveCriticalSection(&g_cs); // otključaj CS
DeleteCriticalSection(&g_cs);

To su studenti koji se službeno prvi put susreću s programiranjem aplikacija koje imaju GUI tako da nije mi u cilju mučiti ih s previše toga. Jednostavno da naprave nekakvu smislenu aplikaciju u kojoj vide konkretni rezultat i primjenu teme (u ovom slučaju threadovi).


Re: C++ Builder MultiThrading 12.07.2012. u 16:33 · pre 174 meseca #13
Smem li da pitam gde predaješ i kojim studentima? Je li BCB zvanični nastavni alat?
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: C++ Builder MultiThrading 12.07.2012. u 23:06 · pre 174 meseca #14
Tehničko veleučilište u Zagrebu (Informatika + Računarstvo). Sve do sada je korišten Visual Studio i MFC, no s obzirom da dosadašnji nositelj predmeta godinama već nije našao vremena da osvježi gradivo i vježbe uspio sam da prođem s prijedlogom za C++ Builder.
Re: C++ Builder MultiThrading 13.07.2012. u 10:11 · pre 174 meseca #15
Off topic

Smem li da pitam zašto nisi progurao Qt, koji je elem besplatan, elem traženiji na tržištu?
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: C++ Builder MultiThrading 13.07.2012. u 10:26 · pre 174 meseca #16
Nažalost ne smatram da imam toliko iskustva u qt-u da bi to mogao tako kvalitetno prenijeti drugima kao da je riječ o BCB-u kojeg koristim cca 10 godina. Da imamo osobu koja ima dovoljno iskustva u tome ne bi bilo nikakvih problema da se praktični dio radi qt + vcl ali ovako je meni osobno to srljanje u nešto što nisam toliko siguran.
Re: C++ Builder MultiThrading 13.07.2012. u 10:43 · pre 174 meseca #17
To je taj problem. Ako sledećih deset godina budeš gurao C++ Builder postaćeš onaj što "nije našao vremena da osvježi gradivo" :)
Re: C++ Builder MultiThrading 13.07.2012. u 10:45 · pre 174 meseca #18
C++ Builder i VCL se za razliku od MFC-a konstantno razvijaju tako da će svakako biti tu prostora za osvježavanje :) Npr. već sljedeće godine uvodim android i ios aplikacije čim za njih izađe podrška u sljedećem C++ Builderu XE3.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme