Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Межпроцессорное взаимодействие и многопоточность в .NET (реферат).docx
Скачиваний:
30
Добавлен:
28.06.2014
Размер:
139.35 Кб
Скачать

AutoResetEvent – составляющие Методы

  • Close

При переопределении в производном классе освобождает все ресурсы, занимаемые текущим объектом WaitHandle.

  • Reset

Задает несигнальное состояние указанного события.

  • Set

Задает сигнальное состояние указанного события.

  • WaitOne

Блокирует текущий поток до получения сигнала текущим объектом WaitHandle.

Определение:

public virtual void Close();

public bool Reset();

public bool Set();

public virtual bool WaitOne();

Примеры

  1. Пример использования класса 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

Потокобезопасность:

Этот тип можно использовать в многопоточных операциях.