Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 24412|Απάντηση: 1

[Πηγή] Η διαφορά μεταξύ ManualResetEvent και AutoResetEvent που μαθαίνεται από νήματα C#

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 31/5/2018 2:59:47 μ.μ. | | | |
Ας συζητήσουμε πρώτα το ManualResetEvent και θα διανθίσω κάποιο περιεχόμενο AutoResetEvent κατά τη διάρκεια της συζήτησης για σύγκριση:

Το ManualResetEvent μπορεί να αποκλείσει ένα ή περισσότερα νήματα μέχρι να ληφθεί ένα σήμα που λέει στο ManualResetEvent να σταματήσει να μπλοκάρει το τρέχον νήμα.

Πληροφορίες σχετικά με το ManualResetEvent

.net/c# Νήμα νήματος Αναστολή και συνέχιση παρωχημένων λύσεων
https://www.itsvse.com/thread-4769-1-1.html
(Πηγή: Architect_Programmer)


Φανταστείτε ότι το αντικείμενο ManualResetEvent έχει μια ιδιότητα τύπου Boolean, IsRelease, για να ελέγξετε εάν θα αποκλείσετε το τρέχον νήμα. Μπορούμε να ορίσουμε αυτήν την ιδιότητα κατά την προετοιμασία, όπως ManualResetEvent event=new ManualResetEvent(false); Αυτό υποδεικνύει ότι η προεπιλεγμένη ιδιότητα είναι ο αποκλεισμός του τρέχοντος νήματος.

Παράδειγμα κώδικα:



Σημειώστε μια σημαντική διαφορά μεταξύ ManualResetEvent και AutoResetEvent εδώ:

Το εγχειρίδιο θα στείλει σίγουρα ένα σήμα τόσο στο νήμα 1 όσο και στο νήμα 2,Το Auto θα στείλει ένα σήμα σε ένα από αυτά μόνο τυχαία.

Γιατί το ένα ονομάζεται χειροκίνητο και το άλλο αυτόματο; Νομίζω ότι αυτή είναι μια ερώτηση που έχουν πολλοί άνθρωποι και τώρα θα εξετάσουμε αυτήν την ερώτηση.

Απλά now_manualResetEvent . set(); Νομίζω ότι όλοι καταλαβαίνουν αυτή την πρόταση, η οποία μπορεί να θεωρηθεί ότι θέτει την ιδιότητα του IsRelease σε πραγματικότητα

_manualResetEvent.WaitOne(); Δεν μπλοκάρει πλέον το νήμα 1 μετά τη λήψη σήματος. Η αξία του IsRelease ισχύει σε όλη τη διαδικασία μετά από αυτό.Αν

Εάν θέλετε να επιστρέψετε την τιμή του IsRelease σε false, πρέπει να καλέσετε ξανά τη μέθοδο _manualResetEvent.Reset().

Εάν είναι _autoResetEvent.set(), τότε η _autoResetEvent.WaitOne() θα ορίσει αυτόματα την τιμή του IsRelease σε false.

Γι' αυτό το ένα λέγεται αυτόματο και το άλλο χειροκίνητο.



Κωδικός δοκιμής:







Προηγούμενος:. Το ταχύτερο στοιχείο χαρτογράφησης αντικειμένων OOM του .NET, το Tiny Mapper, στην πράξη του έργου
Επόμενος:C# ΕΝΤΟΠΙΣΜΟΣ ΣΦΑΛΜΆΤΩΝ ΠΛΗΡΟΦΟΡΊΕΣ ΕΚΤΎΠΩΣΗΣ ΚΑΙ ΕΞΌΔΟΥ ΛΕΠΤΟΜΕΡΉΣ ΕΞΉΓΗΣΗ
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 18/12/2024 8:30:44 μ.μ. |
Τόσο το ManualResetEvent όσο και το AutoResetEvent κληρονομούν απόEventWaitHandle, όπως φαίνεται στο παρακάτω σχήμα:



Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com