Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 24412|Отговор: 1

[Източник] Разликата между ManualResetEvent и AutoResetEvent, научена чрез C# теми

[Копирай линк]
Публикувано в 31.05.2018 г. 14:59:47 ч. | | | |
Нека първо обсъдим ManualResetEvent, а аз ще вмъкна малко съдържание от AutoResetEvent по време на дискусията, за да сравня:

ManualResetEvent може да блокира една или повече нишки, докато не получи сигнал, който казва на ManualResetEvent да спре блокирането на текущата нишка.

Информация за ManualResetEvent

.net/c# Thread thread Suspend and Resume на остарели решения
https://www.itsvse.com/thread-4769-1-1.html
(Източник: Architect_Programmer)


Представете си, че обектът ManualResetEvent има булево типово свойство, IsRelease, което контролира дали да блокира текущата нишка. Можем да зададем това свойство при инициализация, например ManualResetEvent event=new ManualResetEvent(false); Това показва, че по подразбиране свойството е да блокира текущата нишка.

Пример за код:



Обърнете внимание на важна разлика между ManualResetEvent и AutoResetEvent тук:

Ръководството определено ще изпрати сигнал както към Thread 1, така и към Thread 2,Автоматичният сигнал изпраща само на случаен принцип само към един от тях.

Защо едната се нарича ръчна, а другата автоматична? Мисля, че това е въпрос, който много хора имат и сега ще разгледаме този въпрос.

Просто now_manualResetEvent. Set(); Мисля, че всички разбират това изречение, което може да се разглежда като поставяне на свойството на IsRelease на истина

_manualResetEvent.WaitOne(); Вече не блокира нишка 1 след получаване на сигнал. Стойността на IsRelease е вярна през целия процес след това.Ако

Ако искате да върнете стойността на IsRelease във false, трябва отново да извикате метода _manualResetEvent.Reset().

Ако е _autoResetEvent.set(), тогава _autoResetEvent.WaitOne() автоматично ще зададе стойността на IsRelease на false.

Затова едната се нарича автоматична, а другата е ръчна.



Тестов код:







Предишен:. Най-бързият компонент за картографиране на обекти OOM на .NET, Tiny Mapper, в проектната практика
Следващ:C# DEBUG дебъг информация, отпечатване и изход, подробно обяснение
 Хазяин| Публикувано в 18.12.2024 г. 20:30:44 ч. |
И ManualResetEvent, и AutoResetEvent наследяват отEventWaitHandle, както е показано на фигурата по-долу:



Препратка:Входът към хиперлинк е видим.

Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com