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

Zasto se ovo desava???

[es] :: .NET :: .NET Desktop razvoj :: Zasto se ovo desava???

[ Pregleda: 2065 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.bolnica.org.rs.



+1 Profil

icon Zasto se ovo desava???05.08.2010. u 08:58 - pre 166 meseci
Imam ovu klasu:
Code (csharp):

     public class Semaphore
     {
          private Mutex[] m_mutex;
          private Thread[] m_threadIds;
          private int m_threadLimit;

          // constructor
          // parameter - threadLimit (number of threads to control)
          public Semaphore(int threadLimit)
          {
               m_threadLimit = threadLimit;
               m_mutex = new Mutex[m_threadLimit];
               m_threadIds = new Thread[m_threadLimit];
               for (int i=0; i<m_threadLimit; i++)
               {
                    m_mutex[i] = new Mutex();
                    m_threadIds[i] = null;
               }
          }

          // if there is a timeout then WaitHandle.WaitTimeout is returned
          // calling thread should check for this
          public int Wait()
          {
               int index = WaitHandle.WaitAny(m_mutex);
               if (index != WaitHandle.WaitTimeout)
                    m_threadIds[index] = Thread.CurrentThread;
               return index;
          }

          // release the mutex locked by the thread
          public void Release()
          {
               for (int i=0; i<m_threadLimit; i++)
               {
                    if (m_threadIds[i] == Thread.CurrentThread)
                    {
                         m_mutex[i].ReleaseMutex();
                    }
               }
          }

     }
 


i imam ovaj kod u MainForm:
Code (csharp):

        public const byte ENQ = 0x05;
        public static byte[] ENQ_BUFF = { ENQ };

        private void btnSend_Click(object sender, EventArgs e)
        {
            Thread s = new Thread(new ParameterizedThreadStart(SendX));
            s.Start(ENQ_BUFF);
        }

        private void SendX(object param)
        {
            m_semaphore.Wait();
            byte[] msg = (byte[])param;
            Send(msg);
            frmDataSend new_frmDataSend = new frmDataSend();
            new_frmDataSend.Show();
            m_semaphore.Release();
        }

        private void Send(byte[] msg)
        {
            //slanje podataka
        }
 


Moje pitanje je zasto se new_frmDataSend otvori i zatvori odmah? Meni je potrebno da dok god ja new_frmDataSend rucno ne ztvorim da se ona ne gasi. Ono sto je meni potrebno je ono sto se desava kada umesto
Code (csharp):

            frmDataSend new_frmDataSend = new frmDataSend();
            new_frmDataSend.Show();
 

stavim
Code (csharp):

            MessageBox.Show("WORK. JEEE!");
 

Kakava je razlika izmedju MessageBox koji se gasi na OK button i Form koja se gasi na OK button?

[Ovu poruku je menjao mmix dana 05.08.2010. u 10:09 GMT+1]
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 09:02 - pre 166 meseci
Uradi debug, da vidis gde je greska.
Pa stavi ovde.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.bolnica.org.rs.



+1 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 09:05 - pre 166 meseci
Boze naivnosti...resenje je u tome da ukoliko stoji new_frmDataSend.Show() tada kod zatvara formu ali kada stoji new_frmDataSend.ShowDialog() to se ne desava. Eto sa ovim se patim 2h i nista nisam mogao da uradim dok nisam postavio pitanje :)
Nekada su neke stvari prosto inspirativne ;)
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 09:10 - pre 166 meseci
I najboljim se desava
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 09:11 - pre 166 meseci
Cisto iz kurioziteta, sta radis sa ovim programom. Onaj semaphor class mi deluje preterano zakomplikovan.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.bolnica.org.rs.



+1 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 12:50 - pre 166 meseci
No problem mmix.
Pokusavam da omogucim da svaki put kada korisnik klikne da se podaci posalju on naredbu slanja prihvata bez obzira da li je predhodne podatke vec uspeo da posalje. Kada te prdhodne uspe da posalje onda prihvata sledece koji su dosli na red itd.
Nadam se da sam uspeo da objasnim?!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 13:16 - pre 166 meseci
Ok, asinhrono slanje sa redom, al sta ce ti mutex za svaki thread? Moze to i mnogo jednostavnije, jedan komunikacioni thread (kad vec moras da serijalizujes slanja) i mutex samo za komunikaciju sa tim threadom.

Isto mislim da imas potencijalno opasan problem sto dizes nove forme u threadovima, Winforms nije dizajniran da radi sa multithreaded operacijama, sve elemente treba generisati i odrzavati iz glavnog thread-a (zbog njegovog message queue-a)


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
93.87.158.*



+1 Profil

icon Re: Zasto se ovo desava???05.08.2010. u 23:33 - pre 166 meseci
Imas prava sto se tice generisanja formi upravo sam dosao do tog problema, jer formu frmDataSend ne mogu da zatvorim nakon odredjenog dogadjaja. Prijavljuje se Cross-thread problem.
Na osnovu tvoje sugestije formu frmDataSend generisao sam u okviru glavnog threada i samo sam je pokreatao putem ShowDialog() u Thread s. Takodje, kada sam zeleo da pristupim formi kako bi je zatvorio to sam radio putem delegata, ali problem Cross-thread se i dalje ponovlja.
Postojili neka solucija...
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
212.200.231.*



+8 Profil

icon Re: Zasto se ovo desava???06.08.2010. u 07:10 - pre 166 meseci
Sve što želiš da izmeniš u UI niti iz druge niti moraš da radiš pozivajući Invoke().

Na primer, ako tvoja forma ima neki string property koji želiš da promeniš, to radiš ovako:
Code:

private delegate void SetStringDelegate(string value);

private void SetStringProperty(string text)
        {
            if(InvokeRequired)
            {
                Invoke(new SetStringDelegate(SetStringProperty), new Object[] { text });
            }
            else
            {
                StringProperty = text;
            }
        }
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Zasto se ovo desava???06.08.2010. u 13:58 - pre 166 meseci
Da li postoji mogucnost da ja frmDataSend generisem na glavnom threadu, da je pokrecem na thread_1, a da je gasim u okviru eventa timer_tick?
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Zasto se ovo desava???06.08.2010. u 23:40 - pre 166 meseci
Ovo je resilo stvar
http://www.csharp411.com/close-all-forms-in-a-thread-safe-manner/

[Ovu poruku je menjao bigguy dana 07.08.2010. u 01:41 GMT+1]
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Zasto se ovo desava???

[ Pregleda: 2065 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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