AutoResetEvent Sınıf
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.
Sinyal gönderildiğinde tek bir bekleyen iş parçacığı serbest bırakan ve ardından otomatik olarak sıfırlanan bir iş parçacığı eşitleme olayını temsil eder. Bu sınıf devralınamaz.
public ref class AutoResetEvent sealed : System::Threading::EventWaitHandle
public ref class AutoResetEvent sealed : System::Threading::WaitHandle
public sealed class AutoResetEvent : System.Threading.EventWaitHandle
public sealed class AutoResetEvent : System.Threading.WaitHandle
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AutoResetEvent : System.Threading.EventWaitHandle
type AutoResetEvent = class
inherit EventWaitHandle
type AutoResetEvent = class
inherit WaitHandle
[<System.Runtime.InteropServices.ComVisible(true)>]
type AutoResetEvent = class
inherit EventWaitHandle
Public NotInheritable Class AutoResetEvent
Inherits EventWaitHandle
Public NotInheritable Class AutoResetEvent
Inherits WaitHandle
- Devralma
- Devralma
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnek, kullanıcı Enter tuşuna her bastığında yöntemini (temel sınıfta) çağırarak Set bir kerede bir iş parçacığını serbest bırakmak için nasıl kullanılacağını AutoResetEvent gösterir. Örnek, sinyalli durumda oluşturulan bir AutoResetEvent üzerinde bekleyen üç iş parçacığı başlatır. zaten sinyal durumunda olduğundan AutoResetEvent ilk iş parçacığı hemen serbest bırakılır. Bu, sonraki iş parçacıklarının engellemesi için öğesini sinyalsiz duruma sıfırlar AutoResetEvent . Engellenen iş parçacıkları, kullanıcı Enter tuşuna basarak bunları birer birer serbest bırakana kadar serbest bırakılmaz.
İş parçacıkları ilkinden AutoResetEventserbest bırakıldıktan sonra, sinyalsiz durumda oluşturulan başka bir AutoResetEvent iş parçacığını bekler. Üç iş parçacığı da engelleneceğinden, yöntemin Set tümünü serbest bırakmak için üç kez çağrılması gerekir.
using namespace System;
using namespace System::Threading;
ref class Example
{
private:
static AutoResetEvent^ event_1 = gcnew AutoResetEvent(true);
static AutoResetEvent^ event_2 = gcnew AutoResetEvent(false);
static void ThreadProc()
{
String^ name = Thread::CurrentThread->Name;
Console::WriteLine("{0} waits on AutoResetEvent #1.", name);
event_1->WaitOne();
Console::WriteLine("{0} is released from AutoResetEvent #1.", name);
Console::WriteLine("{0} waits on AutoResetEvent #2.", name);
event_2->WaitOne();
Console::WriteLine("{0} is released from AutoResetEvent #2.", name);
Console::WriteLine("{0} ends.", name);
}
public:
static void Demo()
{
Console::WriteLine("Press Enter to create three threads and start them.\r\n" +
"The threads wait on AutoResetEvent #1, which was created\r\n" +
"in the signaled state, so the first thread is released.\r\n" +
"This puts AutoResetEvent #1 into the unsignaled state.");
Console::ReadLine();
for (int i = 1; i < 4; i++)
{
Thread^ t = gcnew Thread(gcnew ThreadStart(&ThreadProc));
t->Name = "Thread_" + i;
t->Start();
}
Thread::Sleep(250);
for (int i = 0; i < 2; i++)
{
Console::WriteLine("Press Enter to release another thread.");
Console::ReadLine();
event_1->Set();
Thread::Sleep(250);
}
Console::WriteLine("\r\nAll threads are now waiting on AutoResetEvent #2.");
for (int i = 0; i < 3; i++)
{
Console::WriteLine("Press Enter to release a thread.");
Console::ReadLine();
event_2->Set();
Thread::Sleep(250);
}
// Visual Studio: Uncomment the following line.
//Console::Readline();
}
};
void main()
{
Example::Demo();
}
/* This example produces output similar to the following:
Press Enter to create three threads and start them.
The threads wait on AutoResetEvent #1, which was created
in the signaled state, so the first thread is released.
This puts AutoResetEvent #1 into the unsignaled state.
Thread_1 waits on AutoResetEvent #1.
Thread_1 is released from AutoResetEvent #1.
Thread_1 waits on AutoResetEvent #2.
Thread_3 waits on AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #1.
Press Enter to release another thread.
Thread_3 is released from AutoResetEvent #1.
Thread_3 waits on AutoResetEvent #2.
Press Enter to release another thread.
Thread_2 is released from AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #2.
All threads are now waiting on AutoResetEvent #2.
Press Enter to release a thread.
Thread_2 is released from AutoResetEvent #2.
Thread_2 ends.
Press Enter to release a thread.
Thread_1 is released from AutoResetEvent #2.
Thread_1 ends.
Press Enter to release a thread.
Thread_3 is released from AutoResetEvent #2.
Thread_3 ends.
*/
using System;
using System.Threading;
// Visual Studio: Replace the default class in a Console project with
// the following class.
class Example
{
private static AutoResetEvent event_1 = new AutoResetEvent(true);
private static AutoResetEvent event_2 = new AutoResetEvent(false);
static void Main()
{
Console.WriteLine("Press Enter to create three threads and start them.\r\n" +
"The threads wait on AutoResetEvent #1, which was created\r\n" +
"in the signaled state, so the first thread is released.\r\n" +
"This puts AutoResetEvent #1 into the unsignaled state.");
Console.ReadLine();
for (int i = 1; i < 4; i++)
{
Thread t = new Thread(ThreadProc);
t.Name = "Thread_" + i;
t.Start();
}
Thread.Sleep(250);
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Press Enter to release another thread.");
Console.ReadLine();
event_1.Set();
Thread.Sleep(250);
}
Console.WriteLine("\r\nAll threads are now waiting on AutoResetEvent #2.");
for (int i = 0; i < 3; i++)
{
Console.WriteLine("Press Enter to release a thread.");
Console.ReadLine();
event_2.Set();
Thread.Sleep(250);
}
// Visual Studio: Uncomment the following line.
//Console.Readline();
}
static void ThreadProc()
{
string name = Thread.CurrentThread.Name;
Console.WriteLine("{0} waits on AutoResetEvent #1.", name);
event_1.WaitOne();
Console.WriteLine("{0} is released from AutoResetEvent #1.", name);
Console.WriteLine("{0} waits on AutoResetEvent #2.", name);
event_2.WaitOne();
Console.WriteLine("{0} is released from AutoResetEvent #2.", name);
Console.WriteLine("{0} ends.", name);
}
}
/* This example produces output similar to the following:
Press Enter to create three threads and start them.
The threads wait on AutoResetEvent #1, which was created
in the signaled state, so the first thread is released.
This puts AutoResetEvent #1 into the unsignaled state.
Thread_1 waits on AutoResetEvent #1.
Thread_1 is released from AutoResetEvent #1.
Thread_1 waits on AutoResetEvent #2.
Thread_3 waits on AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #1.
Press Enter to release another thread.
Thread_3 is released from AutoResetEvent #1.
Thread_3 waits on AutoResetEvent #2.
Press Enter to release another thread.
Thread_2 is released from AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #2.
All threads are now waiting on AutoResetEvent #2.
Press Enter to release a thread.
Thread_2 is released from AutoResetEvent #2.
Thread_2 ends.
Press Enter to release a thread.
Thread_1 is released from AutoResetEvent #2.
Thread_1 ends.
Press Enter to release a thread.
Thread_3 is released from AutoResetEvent #2.
Thread_3 ends.
*/
Imports System.Threading
' Visual Studio: Replace the default class in a Console project with
' the following class.
Class Example
Private Shared event_1 As New AutoResetEvent(True)
Private Shared event_2 As New AutoResetEvent(False)
<MTAThread()> _
Shared Sub Main()
Console.WriteLine("Press Enter to create three threads and start them." & vbCrLf & _
"The threads wait on AutoResetEvent #1, which was created" & vbCrLf & _
"in the signaled state, so the first thread is released." & vbCrLf & _
"This puts AutoResetEvent #1 into the unsignaled state.")
Console.ReadLine()
For i As Integer = 1 To 3
Dim t As New Thread(AddressOf ThreadProc)
t.Name = "Thread_" & i
t.Start()
Next
Thread.Sleep(250)
For i As Integer = 1 To 2
Console.WriteLine("Press Enter to release another thread.")
Console.ReadLine()
event_1.Set()
Thread.Sleep(250)
Next
Console.WriteLine(vbCrLf & "All threads are now waiting on AutoResetEvent #2.")
For i As Integer = 1 To 3
Console.WriteLine("Press Enter to release a thread.")
Console.ReadLine()
event_2.Set()
Thread.Sleep(250)
Next
' Visual Studio: Uncomment the following line.
'Console.Readline()
End Sub
Shared Sub ThreadProc()
Dim name As String = Thread.CurrentThread.Name
Console.WriteLine("{0} waits on AutoResetEvent #1.", name)
event_1.WaitOne()
Console.WriteLine("{0} is released from AutoResetEvent #1.", name)
Console.WriteLine("{0} waits on AutoResetEvent #2.", name)
event_2.WaitOne()
Console.WriteLine("{0} is released from AutoResetEvent #2.", name)
Console.WriteLine("{0} ends.", name)
End Sub
End Class
' This example produces output similar to the following:
'
'Press Enter to create three threads and start them.
'The threads wait on AutoResetEvent #1, which was created
'in the signaled state, so the first thread is released.
'This puts AutoResetEvent #1 into the unsignaled state.
'
'Thread_1 waits on AutoResetEvent #1.
'Thread_1 is released from AutoResetEvent #1.
'Thread_1 waits on AutoResetEvent #2.
'Thread_3 waits on AutoResetEvent #1.
'Thread_2 waits on AutoResetEvent #1.
'Press Enter to release another thread.
'
'Thread_3 is released from AutoResetEvent #1.
'Thread_3 waits on AutoResetEvent #2.
'Press Enter to release another thread.
'
'Thread_2 is released from AutoResetEvent #1.
'Thread_2 waits on AutoResetEvent #2.
'
'All threads are now waiting on AutoResetEvent #2.
'Press Enter to release a thread.
'
'Thread_2 is released from AutoResetEvent #2.
'Thread_2 ends.
'Press Enter to release a thread.
'
'Thread_1 is released from AutoResetEvent #2.
'Thread_1 ends.
'Press Enter to release a thread.
'
'Thread_3 is released from AutoResetEvent #2.
'Thread_3 ends.
Açıklamalar
İş parçacığı etkileşimi (veya iş parçacığı sinyali) için , ManualResetEventve EventWaitHandle kullanırsınızAutoResetEvent
. Daha fazla bilgi için bkz . İş parçacığı etkileşimi.
bir iş parçacığı AutoResetEvent.WaitOne çağrısı yaparak bir sinyal bekler. AutoResetEvent
sinyalsiz durumdaysa, AutoResetEvent.Set çağrılana kadar iş parçacığı bloklar. Bekleyen bir iş parçacığını serbest bırakmak için sinyalleri AutoResetEvent
çağırmaSet
. AutoResetEvent
çağrılana kadar sinyalli Reset
olarak kalır veya tek bir bekleyen iş parçacığı serbest bırakılır ve bu sırada otomatik olarak sinyalsiz duruma döner.
sinyal durumuna geçtiğinde AutoResetEvent
bekleyen bir iş parçacığı yoksa, bir iş parçacığı sinyali gözlemleyene kadar (çağrısı WaitOneyaparak) durum sinyalli olarak kalır. Bu iş parçacığı engellemez: iş AutoResetEvent parçacığını hemen serbest bırakır ve sinyalsiz duruma döner.
Önemli
Yöntemine yapılan her çağrının bir iş parçacığı serbest bırakacağının Set garantisi yoktur. İki çağrı birbirine çok yakınsa, böylece ikinci çağrı bir iş parçacığı serbest bırakılmadan önce gerçekleşir, yalnızca bir iş parçacığı serbest bırakılır. sanki ikinci arama gerçekleşmemiş gibi. Ayrıca bekleyen iş parçacığı olmadığında çağrılır ve AutoResetEvent zaten sinyal verilirseSet, çağrının hiçbir etkisi olmaz.
Oluşturucuya bir Boole değeri geçirerek bir AutoResetEvent
öğesinin ilk durumunu denetleyebilirsiniz: true
ilk durum sinyalliyse ve false
aksi takdirde.
AutoResetEvent
ve WaitAny yöntemleriyle static
WaitAll de kullanılabilir.
AutoResetEvent sınıfından EventWaitHandle türetilir. ile AutoResetEvent oluşturulan EventResetMode.AutoResetbir EventWaitHandle ile işlevsel olarak eşdeğerdir.
Not
sınıfından AutoResetEvent farklı olarak EventWaitHandle , sınıf adlandırılmış sistem eşitleme olaylarına erişim sağlar.
Önemli
Bu tür arabirimini IDisposable uygular. Türünü kullanmayı bitirdiğinizde, doğrudan veya dolaylı olarak atmalısınız. Türü doğrudan atmak için yöntemini bir try
/catch
blokta çağırın.Dispose Bunu dolaylı olarak atmak için (C#'ta) veya Using
(Visual Basic'te) gibi using
bir dil yapısı kullanın. Daha fazla bilgi için arabirim sayfasındaki "IDisposable Uygulayan Bir Nesne Kullanma" bölümüne IDisposable bakın.
Oluşturucular
AutoResetEvent(Boolean) |
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. |
Alanlar
WaitTimeout |
Bekleme tutamaçlarından herhangi biri sinyal almadan önce bir WaitAny(WaitHandle[], Int32, Boolean) işlemin zaman aşımına uğradı olduğunu gösterir. Bu alan sabittir. (Devralındığı yer: WaitHandle) |
Özellikler
Handle |
Geçersiz.
Geçersiz.
Yerel işletim sistemi tanıtıcısını alır veya ayarlar. (Devralındığı yer: WaitHandle) |
SafeWaitHandle |
Yerel işletim sistemi tanıtıcısını alır veya ayarlar. (Devralındığı yer: WaitHandle) |
Yöntemler
Close() |
Geçerli WaitHandletarafından tutulan tüm kaynakları serbest bırakır. (Devralındığı yer: WaitHandle) |
CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
Dispose() |
WaitHandle sınıfının geçerli örneği tarafından kullanılan tüm kaynakları serbest bırakır. (Devralındığı yer: WaitHandle) |
Dispose(Boolean) |
Türetilmiş bir sınıfta geçersiz kılındığında, tarafından WaitHandlekullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları serbest bırakır. (Devralındığı yer: WaitHandle) |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetAccessControl() |
EventWaitHandleSecurity Geçerli EventWaitHandle nesne tarafından temsil edilen adlandırılmış sistem olayı için erişim denetimi güvenliğini temsil eden bir nesne alır. (Devralındığı yer: EventWaitHandle) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
Reset() |
Olayın durumunu işaretsiz olarak ayarlar ve bu da iş parçacıklarının engellenmesine neden olur. |
Reset() |
Olayın durumunu işaretsiz olarak ayarlar ve iş parçacıklarının engellenmesine neden olur. (Devralındığı yer: EventWaitHandle) |
Set() |
Olayın durumunu işaretlendi olarak ayarlar ve bu da en fazla bir bekleyen iş parçacığının devam etmesini sağlar. |
Set() |
Bir veya daha fazla bekleyen iş parçacığının devam etmelerine olanak tanıyarak olayın durumunu işaretlendi olarak ayarlar. (Devralındığı yer: EventWaitHandle) |
SetAccessControl(EventWaitHandleSecurity) |
Adlandırılmış bir sistem olayı için erişim denetimi güvenliğini ayarlar. (Devralındığı yer: EventWaitHandle) |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
WaitOne() |
Geçerli iş parçacığını, geçerli WaitHandle bir sinyal alıncaya kadar engeller. (Devralındığı yer: WaitHandle) |
WaitOne(Int32) |
Geçerli iş parçacığı, milisaniye WaitHandle cinsinden zaman aralığını belirtmek için 32 bit imzalı bir tamsayı kullanarak bir sinyal alana kadar geçerli iş parçacığını engeller. (Devralındığı yer: WaitHandle) |
WaitOne(Int32, Boolean) |
Geçerli iş parçacığını, zaman WaitHandle aralığını belirtmek ve beklemeden önce eşitleme etki alanından çıkıp çıkılmayacağını belirtmek için 32 bit imzalı bir tamsayı kullanarak bir sinyal alana kadar geçerli iş parçacığını engeller. (Devralındığı yer: WaitHandle) |
WaitOne(TimeSpan) |
Geçerli örnek bir sinyal alıncaya kadar geçerli iş parçacığını engeller ve zaman aralığını belirtmek için bir TimeSpan kullanılır. (Devralındığı yer: WaitHandle) |
WaitOne(TimeSpan, Boolean) |
Geçerli örnek bir sinyal alana kadar geçerli iş parçacığını engeller; zaman aralığını belirtmek için kullanarak TimeSpan ve beklemeden önce eşitleme etki alanından çıkıp çıkılmayacağını belirtir. (Devralındığı yer: WaitHandle) |
Belirtik Arabirim Kullanımları
IDisposable.Dispose() |
Bu API, ürün altyapısını destekler ve doğrudan kodunuzdan kullanıma yönelik değildir. WaitHandle tarafından kullanılan tüm kaynakları serbest bırakır. (Devralındığı yer: WaitHandle) |
Uzantı Metotları
GetAccessControl(EventWaitHandle) |
Belirtilen |
SetAccessControl(EventWaitHandle, EventWaitHandleSecurity) |
Belirtilen olay bekleme tanıtıcısı için güvenlik tanımlayıcılarını ayarlar. |
GetSafeWaitHandle(WaitHandle) |
Yerel işletim sistemi bekleme tutamacını güvenli tutamacını alır. |
SetSafeWaitHandle(WaitHandle, SafeWaitHandle) |
Yerel işletim sistemi bekleme tutamacı için güvenli bir tanıtıcı ayarlar. |
Şunlara uygulanır
İş Parçacığı Güvenliği
Bu sınıf iş parçacığı güvenlidir.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin