取消从基础的虚拟处理器根节点的上下文关联。
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
参数
- switchState
表示正在执行切换的线程代理的状态。该参数的类型为 SwitchingProxyState。
备注
使用SwitchOut如果您要取消关联的上下文中,由于任何原因而执行的虚拟处理器根。根据值传入参数switchState,以及是否正在执行虚拟处理器根上,呼叫将立即返回或阻止线程代理与上下文相关联。是要调用错误SwitchOut参数设置为Idle。执行此操作将导致 invalid_argument 异常。
SwitchOut要减少了您计划程序,资源管理器指导您执行此操作,或者因为您所请求的临时超额订阅的虚拟处理器根,并完成了它的虚拟处理器根的数目时很有用。在这种情况下,您应调用该方法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。
必须在 IThreadProxy 接口上调用 SwitchOut,该值表示当前正在执行的线程或结果是未定义的。
在库和 Visual Studio 2010年附带标头中,此方法未考虑参数并没有重新初始化虚拟处理器根。若要保留旧行为,升级到 Visual Studio,2012 年的默认参数值时Blocking提供。
要求
**标头:**concrtrm.h
命名空间: 并发