Pirmiausia aptarkime "ManualResetEvent", o diskusijos metu įterpsiu šiek tiek "AutoResetEvent" turinio, kad palyginčiau:
ManualResetEvent gali blokuoti vieną ar daugiau gijų, kol gaunamas signalas, nurodantis ManualResetEvent nustoti blokuoti dabartinę giją.
Informacija apie ManualResetEvent
Įsivaizduokite, kad objektas ManualResetEvent turi Bulio tipo ypatybę IsRelease, kad būtų galima kontroliuoti, ar blokuoti dabartinę giją. Šią savybę galime nustatyti inicijuojant, pvz., ManualResetEvent event=new ManualResetEvent(false); Tai rodo, kad numatytoji savybė yra blokuoti dabartinę giją.
Kodo pavyzdys:
Atkreipkite dėmesį į svarbų skirtumą tarp ManualResetEvent ir AutoResetEvent čia:
vadovas tikrai nusiųs signalą tiek į 1, tiek į 2 sriegį,Automatinis signalas vienam iš jų išsiųs tik atsitiktinai.
Kodėl vienas vadinamas rankiniu, o kitas - automatiniu? Manau, kad tai yra daugelio žmonių klausimas, ir dabar mes panagrinėsime šį klausimą.
Tiesiog now_manualResetEvent . Rinkinys(); Manau, kad visi supranta šį sakinį, kuris gali būti laikomas IsRelease savybės teisingumu
_manualResetEvent.WaitOne(); Gavus signalą, nebeblokuoja 1 gijos. "IsRelease" vertė galioja viso proceso metu.Jeigu
Jei norite grąžinti IsRelease reikšmę į false, turite dar kartą iškviesti metodą _manualResetEvent.Reset().
Jei jis yra _autoResetEvent.set(), tada _autoResetEvent.WaitOne() automatiškai nustatys IsRelease reikšmę į false.
Štai kodėl vienas vadinamas automatiniu, o kitas - rankiniu.
Bandymo kodas:
|