- •Оглавление
- •Класс Thread. Общая информация.
- •Thread – составляющие
- •Свойства
- •1) В следующем примере кода показаны простейшие функциональные возможности работы с потоками.
- •2)Пример изменения и использования свойств Priotiry, Name, CurrentThread
- •3) Создание потоков в фоновом режиме. Использование свойства IsBackground.
- •4) Ключевое слово lock
- •Interrupt(), Sleep(), SpinWait(), Join()
- •Класс Process Общая информация.
- •Process – составляющие Свойства
- •Примеры:
- •Класс WaitHandle Общая информация.
- •WaitHandle – составляющие Поля
- •Свойства
- •Класс Mutex Общая информация.
- •Mutex – составляющие Свойства
- •Примеры
- •Класс AutoResetEvent Общая информация.
- •AutoResetEvent – составляющие Методы
- •Примеры
- •Класс ManualResetEvent Общая информация.
- •ManualResetEvent – составляющие Методы
- •Примеры
- •Класс Monitor Общая информация.
- •Monitor – составляющие Методы
- •Класс Semaphore
- •Список литературы
AutoResetEvent – составляющие Методы
|
При переопределении в производном классе освобождает все ресурсы, занимаемые текущим объектом WaitHandle. |
|
Задает несигнальное состояние указанного события. |
|
Задает сигнальное состояние указанного события. |
|
Блокирует текущий поток до получения сигнала текущим объектом WaitHandle. |
Определение:
public virtual void Close();
public bool Reset();
public bool Set();
public virtual bool WaitOne();
Примеры
Пример использования класса AutoResetEvent
using System;
using System.Threading;
class WaitOne
{
static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main()
{
Console.WriteLine("Main starting.");
//Ставим метод в очередь на выполнение
ThreadPool.QueueUserWorkItem(
new WaitCallback(WorkMethod), autoEvent);
//Ждем обработки методом сигнала о завершении WorkMethod()
autoEvent.WaitOne();
Console.WriteLine("Work method signaled.\nMain ending.");
}
static void WorkMethod(object stateInfo)
{
Console.WriteLine("Work starting.");
// Симуляция работы
Thread.Sleep(new Random().Next(1000, 8000));
//Сигнал о том что работа закончена
Console.WriteLine("Work ending.");
((AutoResetEvent)stateInfo).Set();
}
}
Выходная информация:
Main starting.
Work starting.
Work ending.
Work method signaled.
Main ending.
Класс ManualResetEvent Общая информация.
Описание:
Дочерний от WaitHandle класс ManualResetEvent предназначен для оповещения ожидающего потока или нескольких ожидающих потоков о том, что произошло событие (доступен или недоступен ресурс)
ManualResetEvent позволяет потокам взаимодействовать друг с другом путем передачи сигналов. Обычно это взаимодействие касается задачи, которую один поток должен завершить до того, как другой продолжит работу.
Когда поток начинает работу, которая должна быть завершена до продолжения работы других потоков, он вызывает метод Reset для того, чтобы поместить ManualResetEvent в несигнальное состояние. Этот поток можно понимать как контролирующий ManualResetEvent. Потоки, которые вызывают метод WaitOne в ManualResetEvent, будут заблокированы, ожидая сигнала. Когда контролирующий поток завершит работу, он вызовет метод Set для сообщения о том, что ожидающие потоки могут продолжить работу. Все ожидающие потоки освобождаются.
Когда это было сообщено, ManualResetEvent остается в сигнальном состоянии до того момента, как оно будет снова установлено вручную. То есть, вызовы к WaitOne немедленно возвращаются.
Можно контролировать начальное состояние ManualResetEvent, передав конструктору логическое значение, значение true, если начальное состояние сигнальное, и false в противном случае.
Иерархия:
System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.ManualResetEvent
Определение:
[C#]
public sealed class AutoResetEvent : WaitHandle
Потокобезопасность:
Этот тип можно использовать в многопоточных операциях.