RTL_UMS_SCHEDULER_ENTRY_POINT Rückruffunktion (winnt.h)
Die anwendungsdefinierte UMS-Funktion (User Mode Scheduling) für den Einstiegspunkt des Schedulers, die einer UMS-Vervollständigungsliste zugeordnet ist.
Der PUMS_SCHEDULER_ENTRY_POINT-Typs definiert einen Zeiger auf diese Funktion. UmsSchedulerProc ist ein Platzhalter für den anwendungsdefinierte Funktionsnamen.
Syntax
RTL_UMS_SCHEDULER_ENTRY_POINT RtlUmsSchedulerEntryPoint;
void RtlUmsSchedulerEntryPoint(
[in] RTL_UMS_SCHEDULER_REASON Reason,
[in] ULONG_PTR ActivationPayload,
[in] PVOID SchedulerParam
)
{...}
Parameter
[in] Reason
Der Grund, warum der Scheduler-Einstiegspunkt aufgerufen wird. Dieser Parameter kann einen der folgenden Werte annehmen.
Wert | Bedeutung |
---|---|
|
Ein UMS-Planerthread wurde erstellt. Der Einstiegspunkt wird mit diesem Grund einmal aufgerufen, wenn EnterUmsSchedulingMode aufgerufen wird. |
|
Ein UMS-Workerthread blockiert. |
|
Ein ausgeführter UMS-Workerthread hat ein Steuerelement durch Aufrufen der Funktion UmsThreadYield ergeben. |
[in] ActivationPayload
Wenn der Reason-ParameterUmsSchedulerStartup ist, ist dieser Parameter NULL.
Wenn der Reason-ParameterUmsSchedulerThreadBlocked ist, gibt Bit 0 dieses Parameters den Typ der Aktivität an, die beim Blockieren des UMS-Workerthreads gewartet wurde.
Wenn der Reason-ParameterUmsSchedulerThreadYield ist, ist dieser Parameter ein Zeiger auf den UMS-Threadkontext des UMS-Workerthreads, der zurückgegeben wurde.
[in] SchedulerParam
Wenn der Reason-ParameterUmsSchedulerStartup ist, ist dieser Parameter das SchedulerParam-Element der UMS_SCHEDULER_STARTUP_INFO-Struktur , die an die EnterUmsSchedulingMode-Funktion übergeben wird, die den Einstiegspunktaufruf ausgelöst hat.
Wenn der Reason-ParameterUmsSchedulerThreadYield ist, ist dieser Parameter der SchedulerParam-Parameter, der an die Funktion UmsThreadYield übergeben wird, die den Einstiegspunktaufruf ausgelöst hat.
Wenn der Reason-ParameterUmsSchedulerThreadBlocked lautet, ist dieser Parameter NULL.
Rückgabewert
Keine
Bemerkungen
Der UmsSchedulerProc-Funktionszeigertyp wird als PUMS_SCHEDULER_ENTRY_POINT in WinBase.h definiert. Der zugrunde liegende Funktionstyp ist als RTL_UMS_SCHEDULER_ENTRY_POINT in WinNT.h definiert.
Jeder UMS-Planerthread verfügt über eine zugeordnete UmsSchedulerProc-Einstiegspunktfunktion , die angegeben wird, wenn der Thread die EnterUmsSchedulingMode-Funktion aufruft. Das System ruft die Scheduler-Einstiegspunktfunktion mit dem Grund UmsSchedulerStartup auf, wenn der Planerthread für UMS konvertiert wird.
Wenn anschließend ein UMS-Workerthread, der im Planerthread ausgeführt wird, oder Blöcke abgibt, ruft das System die Einstiegspunktfunktion des Planerthreads mit einem Zeiger auf den UMS-Threadkontext des Workerthreads auf.
Der Planer der Anwendung ist für die Auswahl des nächsten auszuführenden UMS-Workerthreads verantwortlich. Der Scheduler implementiert alle Richtlinien, die die Ausführung seiner UMS-Threads beeinflussen, einschließlich Prozessoraffinität und Threadpriorität. Beispielsweise kann ein Planer E/A-intensiven Threads Priorität zukommen lassen oder Threads auf einer First-Come-, First-Served-Basis ausführen. Diese Logik kann in der Scheduler-Einstiegspunktfunktion oder an anderer Stelle in der Anwendung implementiert werden.
Wenn ein blockierter UMS-Workerthread aufgehoben wird, stellt das System den nicht blockierten Thread in die Warteschlange der zugehörigen Vervollständigungsliste und signalisiert das Vervollständigungslistenereignis. Um UMS-Workerthreads aus der Vervollständigungsliste abzurufen, verwenden Sie die Funktion DequeueUmsCompletionListItems .
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 7 (nur 64-Bit) [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 R2 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winnt.h (einschließlich WinBase.h, Windows.h) |