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


Метод IVirtualProcessorRoot::Deactivate

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

virtual bool Deactivate(
   IExecutionContext * pContext
) =0;

Параметры

  • pContext
    Контекст, который является в настоящий момент осуществляемым этим корнем.

Возвращаемое значение

Логическое значение. Значение true указывает, что прокси поток выполнил возврат из метода Deactivate в ответ на вызов метода Activate. Значение false указывает, что прокси поток выполнил возврат из метода в ответ на событие уведомления в диспетчере ресурсов. В планировщике потоков в режиме пользователя планируемых (UMS) это означает, что возникли элементы в список завершения планировщика и планировщику необходимо обработать.

Заметки

Используйте этот метод, чтобы временно остановить выполнение корня виртуального процессора, когда не удается найти никакой работы в вашем планировщике. Вызов метода Deactivate должен инициироваться в методе Dispatch контекста выполнения, с которым корневой виртуальный процессор последний раз был активирован. Другими словами прокси поток, вызывающий метод Deactivate, должен быть тот, который в настоящее время выполняется на корневой виртуальный процессор. Вызов метода на корневой виртуальный процессор, который не выполняется, может привести к неопределенному поведению.

Отключенный корень виртуального процессора может быть активирован вызовом метода Activate с тем же аргументом, как переданный в метод Deactivate. Планировщик отвечает за обеспечение спаривания вызовов к методам Activate и Deactivate, но они не должны быть получены в определенном порядке. Диспетчер ресурсов может обрабатывать получение вызова к методу Activate до получения вызова к методу Deactivate, для которого он предназначен.

Если корень виртуального процессора просыпается и возвращаемое значения из метода Deactivatefalse, планировщик должен запросить список завершения UMS через метод IUMSCompletionList::GetUnblockNotifications, отреагировать на эти сведения и впоследствии вызвать метода Deactivate еще раз. Это должно повторяться до тех пор, пока метод Deactivate не вернет значение true.

invalid_argument выбрасывается, если аргумент pContext имеет значение NULL.

invalid_operation выбрасывается, если корень виртуального процессора не активирован или аргумент pContext не представляет контекст выполнения, который был отправлен недавно этим корневой виртуальный процессор.

Процесс деактивации корня виртуальный процессор уменьшает уровень подписки базовой аппаратный поток на единицу. Дополнительные сведения об уровнях подписки см. в разделе IExecutionResource::CurrentSubscriptionLevel.

Требования

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

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

См. также

Ссылки

Структура IVirtualProcessorRoot

Метод IVirtualProcessorRoot::Activate

Метод IUMSCompletionList::GetUnblockNotifications

Другие ресурсы

Метод IExecutionResource::CurrentSubscriptionLevel