Vispirms apspriedīsim ManualResetEvent, un diskusijas laikā es iejaukšos AutoResetEvent saturā, lai salīdzinātu:
ManualResetEvent var bloķēt vienu vai vairākus pavedienus, līdz tiek saņemts signāls, kas norāda ManualResetEvent pārtraukt bloķēt pašreizējo pavedienu.
Informācija par ManualResetEvent
Iedomājieties, ka objektam ManualResetEvent ir Būla tipa rekvizīts IsRelease, lai kontrolētu, vai bloķēt pašreizējo pavedienu. Mēs varam iestatīt šo rekvizītu, inicializējot, piemēram, ManualResetEvent event=new ManualResetEvent(false); Tas norāda, ka noklusējuma rekvizīts ir bloķēt pašreizējo pavedienu.
Koda piemērs:
Ņemiet vērā svarīgu atšķirību starp ManualResetEvent un AutoResetEvent šeit:
rokasgrāmata noteikti nosūtīs signālu gan 1. pavedienam, gan 2. pavedienam,Auto nosūtīs signālu tikai vienam no tiem nejauši.
Kāpēc vienu sauc par manuālu, bet otru - par automātisku? Es domāju, ka šis ir jautājums, kas rodas daudziem cilvēkiem, un tagad mēs izskatīsim šo jautājumu.
Tikai now_manualResetEvent . Komplekts(); Es domāju, ka visi saprot šo teikumu, ko var uzskatīt par patiesu IsRelease īpašību
_manualResetEvent.WaitOne(); Pēc signāla saņemšanas vairs nebloķē 1. pavedienu. IsRelease vērtība ir patiesa visā procesā pēc tam.Ja
Ja vēlaties atgriezt IsRelease vērtību uz false, vēlreiz jāizsauc metode _manualResetEvent.Reset().
Ja tas ir _autoResetEvent.set(), tad _autoResetEvent.WaitOne() automātiski iestatīs IsRelease vērtību uz false.
Tāpēc vienu sauc par automātisku, bet otru - manuālu.
Testa kods:
|