除非在创建线程后立即使用,否则QueueUserAPC无法正常工作?

时间:2012-04-27 22:17:43

标签: c++ winapi

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

但是,当我创建线程时,创建线程后唯一的时间QueueUserAPC直接。如果我在Sleep(2000);之后插入说CreateThread,然后在睡眠后放置QueueUserAPC,它将不会执行该功能,即使它在Sleep之前执行时也能正常工作(马上)。

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

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

谢谢!

J.R。

1 个答案:

答案 0 :(得分:2)

使用WaitForSingleObjectEx()。除非使用其中一个“Ex”可警告等待调用,否则APC将不会出现并由该线程运行。如果等待返回WAIT_IO_COMPLETION - 线程已执行APC。通常,某种循环用于忽略完成:

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