0

我在使用 API 函数时遇到了一些困难QueueUserAPC。基本上,我创建了一个新线程,它只是在我创建WaitForSingleObjectEvent对象上循环使用。我希望这个线程有点像一个“单独的”工作线程,我可以将随机函数调用分配给我需要异步处理的..

但是,当我创建线程时,唯一有效的时间QueueUserAPC是在创建线程之后。如果我插入说,Sleep(2000);就在 之后CreateThread,然后放在QueueUserAPCSleep 之后,它将不会执行该功能,即使如果我之前Sleep(立即)执行它也可以。

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

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

谢谢!

JR

4

1 回答 1

2

使用 WaitForSingleObjectEx()。除非使用“Ex”警报等待调用之一,否则 APC 不会出队并由线程运行。如果等待返回 WAIT_IO_COMPLETION - APC 已被线程执行。通常,使用某种循环来忽略该完成:

while(WAIT_IO_COMPLETION==WaitForSingleObjectEx(waithandle, INFINITE,true));
// do signalled stuff
于 2012-04-27T22:32:06.493 回答