除非在创建线程后立即使用,否则 QueueUserAPC 不起作用

QueueUserAPC not working unless used immediately after thread creation?

本文关键字:否则 不起作用 QueueUserAPC 创建 线程      更新时间:2023-10-16

我在使用 API 函数时遇到一些困难 QueueUserAPC .基本上,我创建了一个新线程,该线程仅在我创建的Event对象上使用WaitForSingleObject循环。我希望这个线程是一个"孤独"的工作线程,我可以将随机函数调用分配给我需要异步处理的线程。

但是,当我创建线程时,QueueUserAPC唯一可以工作的时间是在创建线程后直接工作。如果我在CreateThread之后插入 Sleep(2000); ,然后将 QueueUserAPC 放在 Sleep 之后,它将不会执行该函数,即使如果我在 Sleep 之前(立即)执行此操作,它也会起作用。

我尝试对

线程使用不同的句柄,我尝试重置事件对象,在它不起作用时检查返回值 QueueUserAPC(它等于 1,MSDN 说非零结果是成功操作)。

我不太知道该怎么办。任何建议将不胜感激。

谢谢!

J.R.

使用 WaitForSingleObjectEx()。 除非使用其中一个"Ex"可警报等待调用,否则 APC 不会由线程取消排队和运行。 如果等待返回WAIT_IO_COMPLETION - 线程已执行 APC。 通常,使用某种循环来忽略该完成:

while(WAIT_IO_COMPLETION==WaitForSingleObjectEx(waithandle, INFINITE,true));
// do signalled stuff