AutoResetEvent(Boolean) Konstruktor
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Inicializuje novou instanci AutoResetEvent třídy s logickou hodnotou označující, zda má být počáteční stav signalizován.
public:
AutoResetEvent(bool initialState);
public AutoResetEvent(bool initialState);
new System.Threading.AutoResetEvent : bool -> System.Threading.AutoResetEvent
Public Sub New (initialState As Boolean)
Parametry
- initialState
- Boolean
true nastavit počáteční stav, který má být signalován; false nastavit počáteční stav na nesignalizovat.
Příklady
Následující příklad používá AutoResetEvent k synchronizaci aktivit dvou vláken. První vlákno, což je vlákno aplikace, spustí Main. Zapíše hodnoty do chráněného prostředku, což je pole static (Shared v Visual Basic) s názvem number. Druhé vlákno spustí statickou ThreadProc metodu, která čte hodnoty zapsané .Main
Metoda ThreadProc čeká na AutoResetEvent. Při Main volání metody Setna AutoResetEvent , ThreadProc metoda přečte jednu hodnotu. Okamžitě AutoResetEvent se resetuje, takže ThreadProc metoda čeká znovu.
Logika programu zaručuje, že ThreadProc metoda nikdy nebude číst stejnou hodnotu dvakrát. Nezaručuje, že ThreadProc metoda bude číst každou hodnotu zapsanou Main. Tato záruka by vyžadovala druhý AutoResetEvent zámek.
Po každé operaci Main zápisu získá voláním Thread.Sleep metody druhé vlákno šanci spustit. Jinak by v počítači Main s jedním procesorem zapisoval mnoho hodnot mezi všemi dvěma operacemi čtení.
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