IVirtualProcessorRoot::Deactivate 方法
使当前正在此虚拟处理器根上执行的线程代理停止调度执行上下文。 线程代理将继续执行对 Activate 方法的调用。
virtual bool Deactivate(
IExecutionContext * pContext
) =0;
参数
- pContext
当前正由此根调度的上下文。
返回值
一个布尔值。 true 的值指示从响应 Activate 方法调用的 Deactivate 方法返回的线程代理。 false 的值指示从响应资源管理器中的通知事件的方法返回的线程代理。 在用户模式计划 (UMS) 线程计划程序上,这表示项已出现在该计划程序的完成列表中,且需要该计划程序来处理这些项。
备注
当您计划程序中找不到任何工作时使用此方法暂时停止执行虚拟处理器根。 对 Deactivate 方法的调用必须源于上次激活所用的虚拟处理器根的执行上下文的 Dispatch 方法中。 也就是,调用 Deactivate 方法的线程代理必须是当前正在虚拟处理器根上执行的线程代理。 调用虚拟处理器根的方法时,您将不执行可能会导致未定义行为的任务。
通过调用 Activate 方法并将相同的参数传递给 Deactivate 方法,可以唤醒停用的虚拟处理器根。 计划程序负责确保对 Activate 和 Deactivate 方法的调用是成对的,但他们不需要接收特定的顺序。 资源管理器可以处理接收对于 Activate 方法的调用,该处理是在它接收到对于 Deactivate 方法(其使用对象)的调用之前。
如果虚拟处理器根唤醒,并且从 Deactivate 方法返回的值为 false,则计划程序应通过 IUMSCompletionList::GetUnblockNotifications 方法查询 UMS 完成列表、作用于该信息,随后再次 Deactivate 方法。 这应重复直到 Deactivate 方法返回值 true。
如果实参 pContext 的值为 NULL,则会引发 invalid_argument。
如果从未激活虚拟处理器根,或者实参 pContext 不表示最近由此虚拟处理器根调度的执行上下文,则会引发 invalid_operation。
停用虚拟处理器根的操作会以 1 减少基础硬件线程的订阅级别。 有关订阅级别的详细信息,请参见 IExecutionResource::CurrentSubscriptionLevel。
要求
**标头:**concrtrm.h
命名空间: 并发
请参见
参考
IVirtualProcessorRoot::Activate 方法
IUMSCompletionList::GetUnblockNotifications 方法