Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 24412|Antwort: 1

[Quelle] Der Unterschied zwischen ManualResetEvent und AutoResetEvent wird von C#-Threads gelernt

[Link kopieren]
Veröffentlicht am 31.05.2018 14:59:47 | | | |
Lassen Sie uns zuerst über ManualResetEvent sprechen, und ich werde während der Diskussion einige AutoResetEvent-Inhalte einfügen, um zu vergleichen:

ManualResetEvent kann einen oder mehrere Threads blockieren, bis ein Signal empfangen wird, das ManualResetEvent auffordert, das aktuelle Thread nicht mehr zu blockieren.

Informationen zu ManualResetEvent

.net/c# Thread-Thread Suspend and Resume macht veraltete Lösungen
https://www.itsvse.com/thread-4769-1-1.html
(Quelle: Architect_Programmer)


Stellen Sie sich vor, das ManualResetEvent-Objekt besitzt eine Boolean-Typ-Eigenschaft, IsRelease, um zu steuern, ob der aktuelle Thread blockiert wird. Wir können diese Eigenschaft beim Initialisieren festlegen, zum Beispiel ManualResetEvent event=new ManualResetEvent(false); Dies zeigt an, dass die Standardeigenschaft darin besteht, den aktuellen Thread zu blockieren.

Codebeispiel:



Beachten Sie hier einen wichtigen Unterschied zwischen ManualResetEvent und AutoResetEvent:

Das Handbuch wird definitiv sowohl an Gewinde 1 als auch an Faden 2 ein Signal senden.Auto sendet nur zufällig ein Signal an einen von ihnen.

Warum heißt das eine manuell und das andere automatisch? Ich denke, das ist eine Frage, die viele Menschen stellen, und nun werden wir uns dieser Frage anschauen.

Einfach now_manualResetEvent. Set(); Ich denke, jeder versteht diesen Satz, der als Einstellung der Eigenschaft von IsRelease als wahr angesehen werden kann

_manualResetEvent.WaitOne(); Blockiert Thread 1 nicht mehr nach Empfang eines Signals. Der Wert von IsRelease ist während des gesamten danach durchgehenden Prozesses wahr.Wenn

Wenn du den Wert von IsRelease auf false zurücksetzen willst, musst du die Methode _manualResetEvent.Reset() erneut aufrufen.

Wenn es _autoResetEvent.set() ist, setzt _autoResetEvent.WaitOne() automatisch den Wert von IsRelease auf false.

Deshalb heißt das eine Auto und das andere manuell.



Testcode:







Vorhergehend:. .NETs schnellste OOM-Objektmapping-Komponente, Tiny Mapper, in der Projektpraxis
Nächster:C# Debugging, Debugging, Druck und Ausgabe, detaillierte Erklärung
 Vermieter| Veröffentlicht am 18.12.2024 20:30:44 |
Sowohl ManualResetEvent als auch AutoResetEvent erben vonEventWaitHandle, wie in der untenstehenden Abbildung dargestellt:



Referenz:Der Hyperlink-Login ist sichtbar.

Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com