Thread korrekt beenden?



  • Morgen:)

    folgendes Thread Klasse:

    class foo{
    
       ManualResetEvent m_evRunning;
    
       public foo(ManualResetEvent evRunning)
    {
       m_evRunning= evRunning;
    }
      public void Cycle()
    { 
     while(!m_evRunning.Waitone(0,true)
     {
       //Do something til event fired
     }
    } 
    
    }
    
    class ExecuteThread : IDisposable{
    
     Thread m_Thread=null;
    ManualResetEvent m_evRunning= new ManualResetEvent(false);
     public ExecuteThread()
    {
    
      m_Thread= new Thread(new ThreadStrart(new foo(m_evRunning).cycle)).start();
    
    }
    public void Dispose()
        {
            if (!disposed)
            {
                try
                {
                    m_evRunning.Set();
                    m_Thread.Join();
    
                }
                finally
                {
                    disposed = true;
                    GC.SuppressFinalize(this);
                }
            }
        }
     ~ExecuteThread()
        {
             if (!disposed)
            {
                Dispose();
            }
    
        }
    
    }
    

    So nun die frage, reicht es wenn ich Join aufrufe am ende , oder sollte ich die Thread funktion schleife auch verlassen? Wie ist das bei C# geregelt??



  • Hi,

    Der Thread terminiert wenn die Thread Funktion zurückkehrt.
    Das heisst, bei deinem Bsp. sollte die Funktion foo.Cycle() zurückkehren, was auch geschieht wenn dein Event gesetzt wird. Der Loop muss also beendet werden.

    Das Join() hat damit nichts zu tun. Das Join() bewirkt lediglich, dass der aufrufende Thread warted, bis der entsprechende Thread terminiert ist.

    Also:
    1. Veranlassen, dass die Thread Funktion zurückkehrt
    2. Join() aufrufen und warten bis Thread terminiert.

    Simon


Anmelden zum Antworten