本文主要是介绍插入用户APC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每个_Kthread都有一个成员Alerted,默认为0,表示是否可以被APC唤醒。所以下面这段程序,即使插入了APC,但是t线程仍然不会执行。
让t线程执行APC函数的方法是使t线程变成可被唤醒状态,使用函数SleepEx(时间,是否可以唤醒线程),第二个参数为true,Alerted设置为1,即可被唤醒;在插入APC时,APC函数就会执行。
#include "stdafx.h"
#include<Windows.h>
DWORD WINAPI threadProc(LPVOID p)
{for (size_t i = 0; i < 1000; i++){Sleep(200);/*SleepEx(200,1);*/printf("ttt\n");}return 0;
}
VOID WINAPI apcc(ULONG_PTR p)
{printf("APC*********************\n");
}int _tmain(int argc, _TCHAR* argv[])
{HANDLE t = CreateThread(NULL, 0, threadProc, 0, 0, 0);Sleep(5000);//让主线程等待一段时间,否则不一定能把apc插入到t线程。/*SleepEx(1000, 1);*/QueueUserAPC((PAPCFUNC)apcc, t, 0);printf("Pause\n");system("pause");return 0;
}
执行结果:
这篇关于插入用户APC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!