Aracılığıyla paylaş


AutoResetEvent(Boolean) Oluşturucu

Tanım

sınıfının yeni bir örneğini AutoResetEvent , ilk durumun sinyalli olarak ayarlanıp ayarlanmayacağını belirten bir Boole değeriyle başlatır.

public:
 AutoResetEvent(bool initialState);
public AutoResetEvent (bool initialState);
new System.Threading.AutoResetEvent : bool -> System.Threading.AutoResetEvent
Public Sub New (initialState As Boolean)

Parametreler

initialState
Boolean

true ilk durumu sinyalli olarak ayarlamak için; false başlangıç durumunu sinyalsiz olarak ayarlamak için.

Örnekler

Aşağıdaki örnekte, iki iş parçacığının etkinliklerini eşitlemek için bir AutoResetEvent kullanılır. Uygulama iş parçacığı olan ilk iş parçacığı yürütülür Main. Korumalı kaynağa ( Visual Basic içinde) adlı numberbir static``Shared alan olan değerleri yazar. İkinci iş parçacığı tarafından yazılan Maindeğerleri okuyan statik ThreadProc yöntemi yürütür.

ThreadProc yöntemi için AutoResetEventbekler. üzerinde yöntemini ThreadProc AutoResetEventçağırdığında Main Set yöntemi bir değeri okur. hemen AutoResetEvent sıfırlanır, böylece ThreadProc yöntem yeniden bekler.

Program mantığı, yöntemin ThreadProc hiçbir zaman aynı değeri iki kez okumayacağını garanti eder. yönteminin ThreadProc tarafından Mainyazılan her değeri okuyacağını garanti etmez. Bu garanti ikinci AutoResetEvent bir kilit gerektirir.

Her yazma işleminden sonra, Main ikinci iş parçacığına Thread.Sleep yürütme şansı vermek için yöntemini çağırarak verir. Aksi takdirde, tek işlemcili bir bilgisayarda Main iki okuma işlemi arasında birçok değer yazabilirsiniz.

using namespace System;
using namespace System::Threading;
ref class MyMainClass
{
public:
   static void MyReadThreadProc()
   {
      while ( true )
      {
         
         //The value will not be read until the writer has written
         // at least once since the last read.
         myResetEvent->WaitOne();
         Console::WriteLine( " {0} reading value: {1}", Thread::CurrentThread->Name, number );
      }
   }


   //Initially not signaled.
   static AutoResetEvent^ myResetEvent = gcnew AutoResetEvent( false );
   static int number;
   literal int numIterations = 100;
};

int main()
{
   
   //Create and start the reader thread.
   Thread^ myReaderThread = gcnew Thread( gcnew ThreadStart( MyMainClass::MyReadThreadProc ) );
   myReaderThread->Name = "ReaderThread";
   myReaderThread->Start();
   for ( int i = 1; i <= MyMainClass::numIterations; i++ )
   {
      Console::WriteLine( "Writer thread writing value: {0}", i );
      MyMainClass::number = i;
      
      //Signal that a value has been written.
      MyMainClass::myResetEvent->Set();
      
      //Give the Reader thread an opportunity to act.
      Thread::Sleep( 1 );

   }
   
   //Terminate the reader thread.
   myReaderThread->Abort();
}
using System;
using System.Threading;

namespace AutoResetEvent_Examples
{
    class MyMainClass
    {
        //Initially not signaled.
      const int numIterations = 100;
      static AutoResetEvent myResetEvent = new AutoResetEvent(false);
      static int number;
      
      static void Main()
        {
         //Create and start the reader thread.
         Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc));
         myReaderThread.Name = "ReaderThread";
         myReaderThread.Start();

         for(int i = 1; i <= numIterations; i++)
         {
            Console.WriteLine("Writer thread writing value: {0}", i);
            number = i;
            
            //Signal that a value has been written.
            myResetEvent.Set();
            
            //Give the Reader thread an opportunity to act.
            Thread.Sleep(1);
         }

         //Terminate the reader thread.
         myReaderThread.Abort();
      }

      static void MyReadThreadProc()
      {
         while(true)
         {
            //The value will not be read until the writer has written
            // at least once since the last read.
            myResetEvent.WaitOne();
            Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number);
         }
      }
    }
}
Imports System.Threading

Namespace AutoResetEvent_Examples
    Class MyMainClass
        'Initially not signaled.
        Private Const numIterations As Integer = 100
        Private Shared myResetEvent As New AutoResetEvent(False)
        Private Shared number As Integer

        <MTAThread> _
        Shared Sub Main()
            'Create and start the reader thread.
            Dim myReaderThread As New Thread(AddressOf MyReadThreadProc)
            myReaderThread.Name = "ReaderThread"
            myReaderThread.Start()

            Dim i As Integer
            For i = 1 To numIterations
                Console.WriteLine("Writer thread writing value: {0}", i)
                number = i

                'Signal that a value has been written.
                myResetEvent.Set()

                'Give the Reader thread an opportunity to act.
                Thread.Sleep(1)
            Next i

            'Terminate the reader thread.
            myReaderThread.Abort()
        End Sub

        Shared Sub MyReadThreadProc()
            While True
                'The value will not be read until the writer has written
                ' at least once since the last read.
                myResetEvent.WaitOne()
                Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number)
            End While
        End Sub
    End Class
End Namespace 'AutoResetEvent_Examples

Şunlara uygulanır

Ayrıca bkz.