Sprache

DispatchSource Klasse

Definition

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

public class DispatchSource : CoreFoundation.DispatchObject
type DispatchSource = class
    inherit DispatchObject
Vererbung
Abgeleitet

Hinweise

Dispatch-Ereignisquellen können verwendet werden, um eine Vielzahl von Systemobjekten und Ereignissen zu überwachen, einschließlich Dateideskriptoren, Mach-Ports, Prozessen, virtuellen Dateisystemknoten, Signalübermittlung und Zeitgebern.  Um eine bestimmte Art von Quelle zu überwachen, erstellen Sie eine Instanz einer der DispatchSource-Unterklassen:

Wenn eine Statusänderung auftritt, sendet die Verteilerquelle den Ereignishandlerblock an die Zielwarteschlange.

Neu erstellte Quellen werden in einem angehaltenen Zustand erstellt. Nachdem die Quelle durch Festlegen eines Ereignishandlers, Abbruchhandlers, Registrierungshandlers, Kontexts usw. konfiguriert wurde, muss die Quelle durch einen Aufruf Resume() aktiviert werden, bevor ereignisse übermittelt werden.

Quellereignishandler

Um Ereignisse von der Verteilerquelle zu empfangen, sollte ein Ereignishandler über SetEventHandler(Action)angegeben werden. Der Ereignishandler wird an die Zielwarteschlange der Quelle übermittelt, wenn sich der Zustand des zugrunde liegenden Systems ändert oder wenn ein Ereignis auftritt. Wenn eine Quelle ohne Ereignishandlerblocksatz fortgesetzt wird, werden Ereignisse still ignoriert. Wenn der Ereignishandler geändert wird, während die Quelle angehalten wird, oder von einem Block, der in einer seriellen Warteschlange ausgeführt wird, die die Zielwarteschlange der Quelle ist, verwendet der nächste Ereignishandleraufruf den neuen Block.

Verteilerquellen können unabhängig von ihren Zielwarteschleifen, die die Verteilerquelle verwenden und direkt verwenden Suspend() , Resume() angehalten oder fortgesetzt werden. Die Daten, die Ereignisse beschreiben, die auftreten, während eine Quelle angehalten wird, werden zusammengeklammert und übermittelt, sobald die Quelle fortgesetzt wird.

Der Handler muss nicht erneut sicher sein, da er erst erneut an die Zielwarteschlange übermittelt wird, nachdem ein vorheriger Aufruf für diese Verteilerquelle abgeschlossen wurde.

Rufen Sie zum Aufheben des Ereignishandlers den null Aufruf SetEventHandler(Action) als Argument auf.

Registration

Wenn Resume() eine angehaltene oder neu erstellte Quelle aufgerufen wird, kann es eine kurze Verzögerung geben, bevor die Quelle bereit ist, Ereignisse vom zugrunde liegenden Systemhandle zu empfangen. Während dieser Verzögerung wird der Ereignishandler nicht aufgerufen, und Ereignisse werden verpasst.

Sobald die Verteilerquelle beim zugrunde liegenden System registriert ist und bereit ist, alle Ereignisse zu verarbeiten, wird der optionale Registrierungshandler an die Zielwarteschlange übermittelt. Dieser Registrierungshandler kann über SetRegistrationHandler(Action).

Der Ereignishandler wird erst aufgerufen, wenn der Registrierungshandler abgeschlossen ist. Wenn die Quelle abgebrochen wird (siehe unten), bevor sie registriert wird, wird der Registrierungshandler nicht aufgerufen.

Stornierung

Die Cancel() Funktion bricht die Verteilerquelle asynchron ab, sodass kein weiterer Aufruf des Ereignishandlerblocks verhindert wird. Der Abbruch unterbricht keinen derzeit ausgeführten Handlerblock (nicht preemptiv). Wenn eine Quelle vor dem ersten Fortsetzen abgebrochen wird, wird der Ereignishandler nie aufgerufen. (Beachten Sie in diesem Fall, dass die Quelle fortgesetzt werden muss, bevor sie freigegeben werden kann.)

Die IsCanceled Funktion kann verwendet werden, um zu bestimmen, ob die angegebene Quelle abgebrochen wurde.

Wenn eine Verteilerquelle abgebrochen wird, wird der optionale Abbruchhandler an die Zielwarteschlange übermittelt. Der Abbruchhandler kann über SetCancelHandler(Action). Dieser Abbruchhandler wird nur einmal aufgerufen und nur als direkte Folge des Aufrufs Cancel().

Wichtig: Für dateideskriptor- und mach-portbasierte Quellen ist ein Abbruchhandler erforderlich, um den Deskriptor sicher zu schließen oder den Port zu zerstören. Das Schließen des Deskriptors oder ports vor dem Ausführen des Abbruchhandlers kann zu einer Racebedingung führen: Wenn ein neuer Deskriptor mit demselben Wert wie der zuletzt geschlossene Deskriptor zugewiesen wird, während der Ereignishandler der Quelle noch ausgeführt wird, kann der Ereignishandler Daten in den falschen Deskriptor lesen/schreiben.

Eigenschaften

Name Beschreibung
Handle

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
IsCanceled

Ermitteln Sie, ob die angegebene Quelle abgebrochen wurde.

Owns

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)

Methoden

Name Beschreibung
Activate()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DispatchObject)
Cancel()

Bricht die Verteilerquelle asynchron ab.

ClearHandle()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
Dispose()

Gibt alle von diesem Objekt verwendeten Ressourcen frei.

(Geerbt von DisposableObject)
Dispose(Boolean)

Gibt die vom DispatchSource-Objekt verwendeten Ressourcen frei.

Equals(Object)

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
GetCheckedHandle()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
GetHashCode()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
InitializeHandle(NativeHandle)

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DisposableObject)
Release()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DispatchObject)
Resume()

Setzt die Verteilerquelle fort.

Retain()

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DispatchObject)
SetCancelHandler(Action)

Stellt einen Abbruchhandler bereit.

SetEventHandler(Action)

Es wurde ein Handler angegeben, der ausgeführt werden soll, wenn Ereignisse in der Verteilerquelle empfangen werden.

SetRegistrationHandler(Action)

Stellt einen Registrierungshandler bereit.

SetTargetQueue(DispatchQueue)

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

(Geerbt von DispatchObject)
Suspend()

Hält die Verteilerquelle an.

Erweiterungsmethoden

Name Beschreibung
GetHandle(INativeObject)

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

GetNonNullHandle(INativeObject, String)

DispatchSource ist eine Basisklasse, die zum Reprenset-Ereignisquellen verwendet wird, die eine Vielzahl von Systemobjekten und Ereignissen überwachen können, darunter Dateideskriptoren, Mach-Ports, Prozesse, virtuelle Dateisystemknoten, Signalübermittlung und Zeitgeber.

Gilt für: