我使用QueueUserAPC()函数将异步过程调用添加到线程的APC队列中。
假设我已经将10个调用排队到线程中,在线程进入SleepEx()之后执行其中一个调用时,出于某种原因,我决定不执行下一个APC。 我对这个问题的基本而简单的解决方案是将所有调用都包装在if块中,并检查一个全局变量,只有当设置了此条件变量时才执行该块。
是否有更好的方法来解决这个问题? 我能否丢弃线程的APC队列,以便其中排队的其他调用不会被调用?
我使用QueueUserAPC()函数将异步过程调用添加到线程的APC队列中。
假设我已经将10个调用排队到线程中,在线程进入SleepEx()之后执行其中一个调用时,出于某种原因,我决定不执行下一个APC。 我对这个问题的基本而简单的解决方案是将所有调用都包装在if块中,并检查一个全局变量,只有当设置了此条件变量时才执行该块。
是否有更好的方法来解决这个问题? 我能否丢弃线程的APC队列,以便其中排队的其他调用不会被调用?
没有用户模式的方法可以从APC队列中删除项目。(你可以从内核模式中删除,但即使在那里,从APC队列中删除项目也只在拆卸情况下执行。) 无论如何,QueueUserAPC不返回可用的句柄,因此无法取消,完全刷新队列是一个坏主意,因为其他代码可能已经将您不知道的项目放入队列中。