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

[C# ili VB] Cime da izmerim trajanje nekog threada

[es] :: .NET :: [C# ili VB] Cime da izmerim trajanje nekog threada

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon [C# ili VB] Cime da izmerim trajanje nekog threada30.05.2008. u 23:24 - pre 193 meseci
Ovako imam 4 metode koje treba da se izvrsavaju na 4 niti. Ja treba da unesem:
• Broj poslova
• Vreme dolaska posla
• Vreme potrebno da se posao odradi
• Broj I/O uredjaja koji je potreban da bi se posao odradio.

E kako cime ja mogu da izmerim koliko mi se nit izvrsava? Jer ja unosim vreme kada.... ma ne razumem sta treba da uradim :(

Stepen multiprogramiranja n=4 (4 posla istovremeno mogu da se obradjuju). Na mikroporcesorski sistem prikacene su 4 jedinice nekog I/O uredjaja. Moguce je pokrenuti do 4 posla, pri cemu se kao parametri unose vreme kada posao dolazi u sistem, vreme koje je potrebno da se posao odradi, kao i broj jedinica I/O uredjaja koje su potrebne da bi se posao zavrsio (min 1, max 4). Pretpostavka je da posao mora istovremeno da koristi onoliki broj I/O uredjaja koliko je zadato preko parametara.

Formirati GUI izgled aplikacije preko koje ce se unositi parametri simulacije:
• Broj poslova
• Vreme dolaska posla
• Vreme potrebno da se posao odradi
• Broj I/O uredjaja koji je potreban da bi se posao odradio.

Na GUI-ju treba da je moguce posmarati rad poslova (koji posao je aktivan, koliko mu vremena treba da se izvrsi, koje I/O uredjaje trenutno koristi).

Kada se izvrse svi poslovi, treba ponuditi statistiku srednjeg vremena zadrzavanja poslova u sistemu.
Kao pomoc se navodi postavka i resenje slicnog zadatka.
Zad . U trenucima 0, 1, 3 i 5 min na ulaz multiprogramskog sistema stižu poslovi A, B, C, D, čije izvršavanje traje 6, 4, 6 i 2 min i koji u toku rada koriste 2, 3, 1 i 1 jedinicu magnetne trake. Vreme čekanja poslova na završetak pristupa magnetnoj traci je zanemarljivo. Odrediti srednje vreme zadržavanja posla u sistemu ako postoji ukupno 4 jedinice magnetnih traka koje se poslovima dodeljuju za sve vreme postojanja poslova.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 00:56 - pre 193 meseci
A jel ovo neki diplomski ? :)
Evo za pocetak : http://msdn.microsoft.com/en-u...stem.threading.threadpool.aspx
Viva lollapalooza
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 13:20 - pre 193 meseci
Citat:
A jel ovo neki diplomski ? :)
Evo za pocetak : http://msdn.microsoft.com/en-u...stem.threading.threadpool.aspx

Ma seminar jbt odkad je pocela bolonja na fakultetima nista ne mogu normalno da stignem da uradim!
Hvala na linku, sad cu proci ovo nego mene vise buni zadatak nego implementacija.

Broj poslova - ovde valjda treba da unesem broj poslova (4) da li to znaci da program onda mora da napravi 4 threada
• Vreme dolaska posla - ajde recimo da ovde on uzme sad trenutno vreme
• Vreme potrebno da se posao odradi - i ajde da unesem za koliko thread treba da se prekine (Jel to moze uopste?)
• Broj I/O uredjaja koji je potreban da bi se posao odradio. - e ovo nemam pojma sta je

Dobro ajde da vidim dal mi je dobra pretpostavka: Treba da napravim jedan metod koji ce da primi ova 4 parametra odozgo (sa forme)! Onda za toliko puta koliko ima poslova treba da mi instancira thread objekte. I onda jedna metoda koja ce da primi sve te objekte threada i da krene da ih izvrsava neko vreme. To vreme treba da merim necim (a ne znam cime)? I onda kada thread prestane da se izvrsava zaustavim taj neki brojac i snimim vreme, koje cu kasnije da koristim za izracunavanje tog srednjeg vremena! ???
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 15:36 - pre 193 meseci
Code:
private void button1_Click(object sender, EventArgs e)
        {
            #region Niti
            if (checkBox1.Checked)
            {
                Thread a = new Thread(ProcessOne);
            }
            if (checkBox2.Checked)
            {
                Thread b = new Thread(ProcessTwo);
            }
            if (checkBox3.Checked)
            {
                Thread c = new Thread(ProcessThree);
            }
            if (checkBox4.Checked)
            {
                Thread d = new Thread(ProcessFour);
            }
            #endregion


        }

        private static void ProcessOne()
        {
            int i = 0;
            i += 1;
        }
        private static void ProcessTwo()
        {
            int i = 0;
            i += 1;
        }
        private static void ProcessThree()
        {
            int i = 0;
            i += 1;
        }
        private static void ProcessFour()
        {
            int i = 0;
            i += 1;
        }
    }

Znaci ja sam sa forme uneo pocetak kada posao treba da pocne da se izvrsava i koliko sme da traje. To je ono sto me buni ako sam uneo 3 za start i 7 za trajanje, cime i kako da izmerim koliko je posao bio aktivan?
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-3.sezampro.yu.



+395 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 16:30 - pre 193 meseci
Ovaj primer je klasicno pokretanje vise thread-ova u tvom programu ..
Dobro si krenuo tj. poceo .. pogledaj metodu ThreadPoola -a
Code:

public static bool QueueUserWorkItem(
    WaitCallback callBack,
    Object state
)

TaskInfo ti = new TaskInfo("This report displays the number {0}.", 42);
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc), ti)) ;

static void ThreadProc(Object stateInfo) {
        TaskInfo ti = (TaskInfo) stateInfo;
        Console.WriteLine(ti.Boilerplate, ti.Value); 
    }

// koliko poslova toliko i zasebnih ThreadProc-ova .... 


Object state parametar je objekat koji prosledjujes tvojoj thread proceduri ..
a u njoj su ustvari poslovi ili zadaci koje treba pojedinacni posao da zavrsi
ovaj task za sada prihvata string i jedan broj i stampa na ekran ...

Jos jedan metoda is ThreadPoola :
Code:

public static bool SetMaxThreads(
    int workerThreads,
    int completionPortThreads
) ; 
kao i za minimum poslova tj. thread-ova koji treba da se zavrse


http://msdn.microsoft.com/en-us/library/02x3daw5.aspx
E sad valjda je ovo sto tebe najvise interesuje ...
Citat:

• Vreme potrebno da se posao odradi - i ajde da unesem za koliko thread treba da se prekine (Jel to moze uopste?)

Code:

public static RegisteredWaitHandle RegisterWaitForSingleObject(
    WaitHandle waitObject,
    WaitOrTimerCallback callBack,
    Object state,
    uint millisecondsTimeOutInterval,
    bool executeOnlyOnce
)



pogledaj parametre ove funkcije dobro i WaitOrTimerCallBack metodu
http://msdn.microsoft.com/en-u...ading.waitortimercallback.aspx.

Zadajes joj timeout interval ... (i ajde da unesem za koliko thread treba da se prekine )
znaci max. vreme za koje posao treba da se zavrsi
(thread se prekida i ako posao nije odradjen do kraja)
a u callback funkcija se poziva kad tvoj thread zavrsi posao ..
ustvari vreme kada se posao zavrsio pa mozes to da uporedis sa vrednoscu iz timeout intervala
da bi mogao da posle lakse nadjes srednje vreme trajanja posla (poslova)

i pogledaj na : http://msdn.microsoft.com/en-u...stem.threading.waithandle.aspx






[Ovu poruku je menjao deerbeer dana 31.05.2008. u 17:40 GMT+1]
Viva lollapalooza
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 18:45 - pre 193 meseci
Code:

private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i != (vp1.Value + vp2.Value + vp3.Value + vp4.Value); i++)
            {
                Thread MasterThread = new Thread(MasterMethod);
                MasterThread.Start();
            }
        }
        public static void MasterMethod()
        {
            Thread t1 = new Thread(P1);
            Thread t2 = new Thread(P2);
            Thread t3 = new Thread(P3);
            
            t1.Start();
            t2.Start();
            t3.Start();
            
        }

        #region OVDE SU NAM PROCESI
        public  static void P1()
        {
            MessageBox.Show("this is P1");
        }
        public static void P2()
        {
            MessageBox.Show("this is P2");
        }
        public static void P3()
        {
            MessageBox.Show("this is P3");
        }
       
#endregion

E nasao sam drugi nacin kako da resim problem nego mi se pojavilo nesto drugo, imam listBox na formi a iz ovih static metoda ne mogu da joj dodelim vrednosti kako da dodajem vrednosti u listBox kroz ove metode?

 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: [C# ili VB] Cime da izmerim trajanje nekog threada31.05.2008. u 22:20 - pre 193 meseci
Code:
private void button1_Click(object sender, EventArgs e)
        {
            threadstart = new ParameterizedThreadStart(AddListBoxItem);

            for (int i = 0; i != (vp1.Value + vp2.Value + vp3.Value + vp4.Value); i++)
            {
                Thread MasterThread = new Thread(MasterMethod);
                MasterThread.Start();
            }
            
        }
        public  void MasterMethod()
        {
            Thread t1 = new Thread(this.P1);
            Thread t2 = new Thread(this.P2);
            Thread t3 = new Thread(this.P3);           
            t1.Start();
            t2.Start();
            t3.Start();        
            
        }
        public delegate void addtoListbox(object obj);
        private void AddListBoxItem(object item)
        {
            if (listBox1.InvokeRequired)
            {
                addtoListbox adt = new addtoListbox(addItem);
                listBox1.Invoke(adt);
            }
            else
            {
                listBox1.Items.Add(item);
            }
        }
        public void addItem(object obj)
        {
            listBox1.Items.Add(obj);
        }
        public void P1()
        {           
            threadstart("p1");            
        }
        public void P2()
        {            
            threadstart("p2");
        }
        public void P3()
        {            
            threadstart("p3");
        }   

Uf sta sam sad promasio pa nece da mi pozove p1, p2 i p3???
 
Odgovor na temu

[es] :: .NET :: [C# ili VB] Cime da izmerim trajanje nekog threada

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

Postavi temu Odgovori

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