Поделиться через


Метод IThreadProxy::SwitchTo

Выполняет совместное переключение контекста из текущего выполняемого контекста в другой.

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

Параметры

  • pContext
    Контекст выполнения, на который нужно переключиться совместно.

  • switchState
    Указывает состояние прокси потока, выполняющего переключателя. Параметр типа SwitchingProxyState.

Заметки

Этот метод используется для переключения из одного контекста выполнения в другой, из метода IExecutionContext::Dispatch первого контекста выполнения. Метод связывает контекст выполнения pContext с прокси потоком, если он еще не связан. Владение текущим прокси-потоком определяется значением, задаваемым для аргумента switchState.

Используйте значение Idle, когда требуется вернуть выполняющийся в настоящее время прокси-поток диспетчеру ресурсов. Вызов SwitchTo с параметр switchState равным Idle приведет к тому, что контекст выполнения pContext начнет выполняться на подлежащем ресурсе выполнения. Владение этого потока прокси передается диспетчеру ресурсов и ожидается возврат из метода контекста выполнения Dispatch вскоре после возвращения SwitchTo, для завершения передачи. Контекст выполнения, который был управляем прокси-потоком, отсоединяется от прокси-потока и планировщик может свободно использовать его повторно или уничтожить его, как ему подходит.

Используйте значение Blocking, когда требуется, чтобы этот прокси-поток вошел в заблокированное состояние. Вызов SwitchTo с параметр switchState равным Blocking будет приводить к началу выполнения контекста выполнения pContext и блокировать текущий прокси-поток до возобновления. Планировщик сохраняет владение прокси-потоком, когда прокси-поток находится в состоянии Blocking. Блокирующий прокси-поток можно возобновить путем вызова функции SwitchTo, чтобы переключиться на контекст выполнения данного прокси-потока. Также можно возобновить прокси-поток с помощью соответствующего контекста для активации корня виртуального процессор. Дополнительные сведения о том, как это сделать, см. в разделе IVirtualProcessorRoot::Activate.

Используйте значение Nesting, когда нужно временно отсоединить этот прокси-поток от корня виртуального процессора, на котором он выполняется, и планировщика, для которого он выдает работу. Вызов SwitchTo с параметр switchState равным Nesting будет приводить к началу выполнения контекста выполнения pContext и текущий прокси поток также продолжит выполняться, не требуя корня виртуального процессора. Поток прокси-сервера считается покинувшим планировщик до тех пор, пока он не вызывает метод IThreadProxy::SwitchOut в дальнейшем. Метод IThreadProxy::SwitchOut может заблокировать прокси-поток до тех пор, пока корень виртуального процессора снова не станет доступным для перепланирования.

Должен быть вызван SwitchTo на интерфейс IThreadProxy, представляющий текущий выполняемый поток или результаты неопределенные. Функция создает invalid_argument , если значение параметра pContext — NULL.

Требования

Заголовок: concrtrm.h

Пространство имен: Concurrency

См. также

Ссылки

Структура IThreadProxy

Перечисление SwitchingProxyState