我在使用API函数QueueUserAPC
时遇到了一些困难。基本上,我创建了一个新线程,它只是在我创建的WaitForSingleObject
对象上使用Event
循环。我希望这个线程可以成为一个“孤独的”工作线程,我可以将随机函数调用分配给我需要异步处理的..
但是,当我创建线程时,创建线程后唯一的时间QueueUserAPC
将直接。如果我在Sleep(2000);
之后插入说CreateThread
,然后在睡眠后放置QueueUserAPC
,它将不会执行该功能,即使它在Sleep
之前执行时也能正常工作(马上)。
我尝试过对线程使用不同的句柄,我尝试重置事件对象,当它不起作用时检查QueueUserAPC
的返回值(等于1,MSDN表示非零)结果是成功的操作)。
我不知道该怎么做。任何建议都将不胜感激。
谢谢!
J.R。
答案 0 :(得分:2)
使用WaitForSingleObjectEx()。除非使用其中一个“Ex”可警告等待调用,否则APC将不会出现并由该线程运行。如果等待返回WAIT_IO_COMPLETION - 线程已执行APC。通常,某种循环用于忽略完成:
while(WAIT_IO_COMPLETION==WaitForSingleObjectEx(waithandle, INFINITE,true));
// do signalled stuff