有没有办法丢弃APC队列?

时间:2014-02-06 12:38:55

标签: winapi asynchronous wait apc

我使用QueueUserAPC()函数将我的异步过程调用添加到我的线程的APC队列中。

假设我已将10个调用排队到一个线程,并且在线程进入SleepEx()后执行其中一个调用,由于某种原因我决定不执行下一个APC。我对此问题的原始和简单解决方案是使用if块检查全局变量来包装所有调用,并且仅在设置(或不设置)此条件变量时才执行该块。

有更好的方法吗?我可以丢弃线程的APC队列,以便不会调用其中排队的其他调用吗?

1 个答案:

答案 0 :(得分:5)

没有用户模式方法从APC队列中删除项目。 (您可以从内核模式,但即使在那里,从APC队列中删除项目只能在拆解情况下完成。)在任何情况下,QueueUserAPC都不会返回您可以取消的可用句柄,并刷新队列完全是坏主意,因为其他代码可能会将项目放在您不知道的队列中。