|
|
Objavljeno na 31. 05. 2018 14:59:47
|
|
|
|

Najprej se pogovorimo o ManualResetEvent, med razpravo pa bom vmešal nekaj vsebine AutoResetEvent za primerjavo:
ManualResetEvent lahko blokira eno ali več niti, dokler ne prejmejo signala, ki ManualResetEventu naroči, naj preneha blokirati trenutno nit.
Informacije o ManualResetEvent
Predstavljajte si, da ima objekt ManualResetEvent lastnost Boolean tipa, IsRelease, ki nadzoruje, ali blokirati trenutno nit. To lastnost lahko nastavimo ob inicializaciji, na primer ManualResetEvent event=new ManualResetEvent(false); To nakazuje, da je privzeta lastnost blokiranje trenutne niti.
Primer kode:
Opazite pomembno razliko med ManualResetEvent in AutoResetEvent:
Ročno bo zagotovo poslalo signal tako na nit 1 kot na nit 2,Avtomatski signal pošlje le enemu od njih naključno.
Zakaj se ena imenuje ročna, druga pa avtomatska? Mislim, da je to vprašanje, ki si ga zastavlja veliko ljudi, in zdaj si ga bomo ogledali.
Samo now_manualResetEvent. set(); Mislim, da vsi razumejo ta stavek, ki ga lahko razumemo kot nastavitev lastnosti IsRelease na resnično
_manualResetEvent.WaitOne(); Nit 1 po prejemu signala ne blokira več. Vrednost IsRelease je resnična skozi celoten proces po tem.Če
Če želite vrniti vrednost IsRelease na false, morate ponovno poklicati metodo _manualResetEvent.Reset().
Če je _autoResetEvent.set(), bo _autoResetEvent.WaitOne() samodejno nastavil vrednost IsRelease na false.
Zato se ena imenuje avtomatska, druga pa ročna.
Testna koda:
|
Prejšnji:. .NET-ova najhitrejša komponenta za preslikavo objektov v OOM, Tiny Mapper, v projektni praksiNaslednji:C# DEBUG debug informacije, tiskanje in izhod, podrobna razlaga
|