AutoResetEvent(Boolean) Oluşturucu
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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ı number
bir static``Shared
alan olan değerleri yazar. İkinci iş parçacığı tarafından yazılan Main
değ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 Main
yazı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