Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 24412|Risposta: 1

[Fonte] La differenza tra ManualResetEvent e AutoResetEvent appreso dai thread C#

[Copiato link]
Pubblicato su 31/05/2018 14:59:47 | | | |
Parliamo prima di ManualResetEvent, e durante la discussione inserirò alcuni contenuti di AutoResetEvent per confrontare:

ManualResetEvent può bloccare uno o più thread fino a quando non riceve un segnale che indica a ManualResetEvent di smettere di bloccare il thread corrente.

Informazioni su ManualResetEvent

Thread .net/c# Sospendi e Riprendi soluzioni obsolete
https://www.itsvse.com/thread-4769-1-1.html
(Fonte: Architect_Programmer)


Immagina che l'oggetto ManualResetEvent abbia una proprietà di tipo booleana, IsRelease, per controllare se bloccare il thread corrente. Possiamo impostare questa proprietà durante l'inizializzazione, come ManualResetEvent event=new ManualResetEvent(false); Questo indica che la proprietà predefinita è bloccare il thread corrente.

Esempio di codice:



Nota una differenza importante tra ManualResetEvent e AutoResetEvent qui:

Il manuale sicuramente invierà un segnale sia al filo 1 che al filettamento 2,L'automatico invia un segnale a uno di loro solo in modo casuale.

Perché uno si chiama manuale e l'altro automatico? Penso che questa sia una domanda che molte persone si pongono, e ora la esamineremo.

Solo now_manualResetEvent. Set(); Penso che tutti comprendano questa frase, che può essere considerata come un modo per impostare la proprietà di IsRelease a vera

_manualResetEvent.AspettaOne(); Non blocca più il thread 1 dopo aver ricevuto un segnale. Il valore di IsRelease è vero per tutto il processo successivo.Se

Se vuoi restituire il valore di IsRelease a false, devi richiamare il metodo _manualResetEvent.Reset().

Se è _autoResetEvent.set(), allora _autoResetEvent.WaitOne() imposterà automaticamente il valore di IsRelease su false.

Ecco perché uno si chiama automatico e l'altro manuale.



Codice di test:







Precedente:. Il componente di mappatura OOM più veloce di .NET, Tiny Mapper, nella pratica del progetto
Prossimo:Spiegazione dettagliata delle informazioni di debug Debug in C#
 Padrone di casa| Pubblicato su 18/12/2024 20:30:44 |
Sia ManualResetEvent che AutoResetEvent ereditano daEventWaitHandle, come mostrato nella figura sottostante:



Riferimento:Il login del link ipertestuale è visibile.

Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com