#include "stdafx.h"
volatile long nCount(0);
VOID WINAPI APCFunc(ULONG_PTR dwParam)
{
printf("回调函数调用计数:%d\n",nCount++);
}
UINT WINAPI ThreadFunc(void* arg)
{
HANDLE hEvent = (HANDLE)arg;
DWORD dwRet = WaitForSingleObjectEx(hEvent,INFINITE,TRUE);
if (dwRet == WAIT_OBJECT_0)
{
printf("hEvent被触发!\n");
}
if (dwRet == WAIT_IO_COMPLETION)
{
printf("APC项被添加到APC队列中,被触发!\n");
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("进入主线程!\n");
HANDLE hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
HANDLE hThread = (HANDLE) _beginthreadex(NULL,0,ThreadFunc,(void*)hEvent,0,NULL);
//hThread = (HANDLE) _beginthread(ThreadFunc,10240,(void*)hEvent);
Sleep(5000);
printf("开始抛APC项到线程队列中!\n");
QueueUserAPC(APCFunc,hThread,NULL);
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
CloseHandle(hEvent);
printf("退出主线程!\n");
system("pause");
return 0;
}
进入主线程!
开始抛APC项到线程队列中!
回调函数调用计数:0
APC项被添加到APC队列中,被触发!
退出主线程!
请按任意键继续. . .