Freigeben über


IThreadProxy::SwitchTo-Methode

Führt einen kooperativen Kontextwechsel vom derzeit ausgeführten Kontext zu einem anderen durch.

virtual void SwitchTo(
   IExecutionContext * pContext,
   SwitchingProxyState switchState
) =0;

Parameter

  • pContext
    Der Ausführungskontext, zu dem kooperativ gewechselt werden soll.

  • switchState
    Gibt den Zustand des Threadproxys an, der den Switch ausführt. Der Parameter besitzt den Typ SwitchingProxyState.

Hinweise

Verwenden Sie diese Methode, um von einem Ausführungskontext zu einem anderen zu wechseln, von der IExecutionContext::Dispatch-Methode des ersten Ausführungskontexts. Die Methode ordnet den Ausführungskontext pContext einem Threadproxy zu, wenn es nicht bereits einem zugeordnet ist. Der Besitz am aktuellen Threadproxy wird vom Wert bestimmt, den Sie für das switchState-Argument angeben.

Verwenden Sie den Wert Idle, wenn Sie der derzeit ausgeführte Threadproxy zum Ressourcen-Manager zurückkehren soll. Ein Aufruf von SwitchTo mit dem Wert Idle im switchState-Parameter bewirkt, dass der Ausführungskontext pContext mit der Ausführung in der zugrunde liegenden Ausführungsressource beginnt. Dem Ressourcen-Manager wird der Besitz an diesem Threadproxy übergeben, und es wird erwartet, dass Sie so schnell wie möglich aus der Dispatch-Methode des Ausführungskontexts zurückkehren, nachdem SwitchTo zurückgekehrt ist, um die Übertragung abschließen zu können. Die Zuordnung des Ausführungskontexts, den der Threadproxy weitergeleitet hat, zum Threadproxy wird aufgehoben, und der Planer kann es nach Belieben wiederverwenden oder zerstörten.

Verwenden Sie den Wert Blocking, wenn Sie möchten, dass dieser Threadproxy in einen blockierten Zustand übergeht. Ein Aufruf von SwitchTo mit dem Wert Blocking im switchState-Parameter bewirkt, dass der Ausführungskontext pContext mit der Ausführung beginnt und den aktuellen Threadproxy blockiert, bis er fortgesetzt wird. Der Planer behält den Besitz des Threadproxys bei, wenn der Threadproxy im Zustand Blocking ist. Der blockierende Threadproxy kann fortgesetzt werden, indem die Funktion SwitchTo aufgerufen wird, um zum Ausführungskontext dieses Threadproxys zu wechseln. Sie können auch den Threadproxy fortsetzen, indem Sie seinen zugeordneten Kontext verwenden, um den Stamm eines virtuellen Prozessors zu aktivieren. Weitere Informationen hierzu finden Sie unter IVirtualProcessorRoot::Activate.

Verwenden Sie den Wert Nesting, wenn Sie diesen Threadproxy vom Stamm des virtuellen Prozessors, für den dieser ausgeführt wird, und vom Planer, für den er Arbeit verteilt, vorübergehend trennen möchten. Ein Aufruf von SwitchTo mit dem Wert Nesting im switchState-Parameter bewirkt, dass der Ausführungskontext pContext mit der Ausführung beginnt und der aktuelle Threadproxy ebenfalls weiter ausgeführt wird, ohne dass ein virtueller Prozessorstamm erforderlich ist. Es wird angenommen, dass der Threadproxy den Planer verlassen hat, bis er die IThreadProxy::SwitchOut-Methode zu einem späteren Zeitpunkt aufruft. Die IThreadProxy::SwitchOut-Methode könnte den Threadproxy blockieren, bis ein virtueller Prozessorstamm verfügbar ist, um neu zu planen.

SwitchTo muss für die IThreadProxy-Schnittstelle aufgerufen werden, die den gerade ausgeführten Thread darstellt, oder die Ergebnisse sind nicht definiert. Die Funktion löst invalid_argument aus, wenn der Parameter pContext auf den Wert NULL festgelegt wird.

Anforderungen

Header: concrtrm.h

Namespace: Concurrency

Siehe auch

Referenz

IThreadProxy-Struktur

SwitchingProxyState-Enumeration