插入用户APC

本文深入探讨了_Kthread中Alerted成员的作用及其与APC(Asynchronous Procedure Call)的关系。通过具体代码示例,解释了如何使用SleepEx函数使线程进入可唤醒状态,从而确保APC函数的正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每个_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;
}

执行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值