内核模式代码可以prevent some or all asynchronous procedure calls (APCs) by entering a critical or guarded region or by Raising the current IRQL。这样,可以执行包含可警告等待的代码而不受APC的干扰。
用户模式代码是否有类似的方式(临时)禁用当前线程中的用户模式APC?
我很高兴托管和非托管代码的答案。我已经验证以下方法不起作用:
EnterCriticalSection
/ LeaveCriticalSection
)std::mutex
,std::recursive_mutex
,...)lock
语句,MethodImpl(MethodImplOptions.Synchronized)
注释)不会。阻止用户模式APC发生的唯一选项是:
QueueUserWorkItem
时,WT_EXECUTEDEFAULT
似乎是个好人选:
回调函数排队到一个无法执行可警告等待的线程。(感谢RbMm确保在评论中没有用户模式API来禁用APC)