Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 24412|Válasz: 1

[Forrás] A különbség a ManualResetEvent és az AutoResetEvent között, amit C# szálak tanulnak meg

[Linket másol]
Közzétéve 2018. 05. 31. 14:59:47 | | | |
Beszéljünk először a ManualResetEventről, és a beszélgetés során összefűzöm az AutoResetEvent tartalmat, hogy összehasonlítsam:

A ManualResetEvent blokkolhat egy vagy több szálat, amíg egy jel nem érkezik, amely arra figyelmezteti a ManualResetEvent-et, hogy hagyja abba a jelenlegi szál blokkolását.

Információk a ManualResetEventről

.net/c# Thread thread Suspend and Resume elavult megoldások
https://www.itsvse.com/thread-4769-1-1.html
(Forrás: Architect_Programmer)


Képzeljük el, hogy a ManualResetEvent objektumnak van egy Boolean típusú tulajdonsága, az IsRelease, amely szabályozza, hogy blokkolja-e a jelenlegi szálat. Ezt a tulajdonságot beállíthatjuk inicializáláskor, például ManualResetEvent event=new ManualResetEvent(false); Ez azt jelzi, hogy az alapértelmezett tulajdonság a jelenlegi szál blokkolása.

Kód példa:



Fontos különbséget figyelj meg a ManualResetEvent és az AutoResetEvent között itt:

A kézikönyv biztosan jelet küld mind az 1-es, mind a 2-es szálnak,Az automatikus csak véletlenszerűen küld jelet az egyiküknek.

Miért hívják az egyiket manuálisnak, a másikat automatának? Úgy gondolom, ez egy olyan kérdés, amit sokan felmerülnek, és most ezt vizsgáljuk.

Csak now_manualResetEvent. Set(); Szerintem mindenki érti ezt a mondatot, ami úgy tekinthető, hogy az IsRelease tulajdonságát igazra állítja

_manualResetEvent.WaitOne(); Már nem blokkolja az 1-es szálat jel érkezése után. Az IsRelease értéke az egész folyamat alatt igaz.Ha

Ha vissza akarod állítani az IsRelease értékét false-ra, újra hívnod kell a _manualResetEvent.Reset() metódust.

Ha _autoResetEvent.set(), akkor a _autoResetEvent.WaitOne() automatikusan állítja be az IsRelease értékét hamisnak.

Ezért hívják az egyiket automatának, a másikat manuálisnak.



Tesztkód:







Előző:. A .NET leggyorsabb OOM objektumleképező komponense, a Tiny Mapper, a projektgyakorlatban
Következő:C# DEBUG debug információ nyomtatás és kimenet részletes magyarázat
 Háziúr| Közzétéve 2024. 12. 18. 20:30:44 |
Mind a ManualResetEvent, mind az AutoResetEvent örökölEventWaitHandle, ahogy az alábbi ábrán látható:



Utalás:A hiperlink bejelentkezés látható.

Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com