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


Метод IThreadProxy::SwitchOut

Отсоединяет контекста из базовой корневой виртуальный процессор.

virtual void SwitchOut(
   SwitchingProxyState switchState = Blocking
) =0;

Параметры

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

Заметки

Использование SwitchOut Если необходимо отделить контекста из корня виртуального процессора, его выполнение, по любой причине.В зависимости от значения передается в параметр switchState, и ли он выполняется в корне виртуального процессора, вызов будет немедленно или блокировать поток прокси-сервер, связанный с контекстом.Ошибка вызова SwitchOut с параметром, значение Idle.Это приведет к invalid_argument исключение.

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

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

Корневой виртуальный процессор повторно инициализированный ничем не отличается от совершенно новый корневой виртуальный процессор, ваш планировщик предоставлен диспетчером ресурсов.Можно использовать его для выполнения путем активации с контекстом выполнения с помощью IVirtualProcessorRoot::Activate.

Должен быть вызван SwitchOut на интерфейс IThreadProxy, представляющий текущий выполняемый поток или результаты неопределенные.

Библиотеки и заголовки, которые поставляются с Visual Studio 2010 этот метод не приняла параметр и не повторно инициализировать корневой виртуальный процессор.Для сохранения старого поведения при обновлении до 2012 Visual Studio, значение параметра по умолчанию Blocking предоставляется.

Требования

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

Пространство имен: параллелизма

См. также

Ссылки

Структура IThreadProxy