#include"stdafx.h"
#include<windows.h>
#include<iostream>
using namespace std;
void CALLBACK Work(PTP_CALLBACK_INSTANCE instance,PVOID context,PTP_WORK work)
{
int *p=static_cast<int*>(context);
cout<<"id="<<GetCurrentThreadId()<<" "<<*p<<endl;
//getc(stdin);
}
void CALLBACK Timer(PTP_CALLBACK_INSTANCE instance,PVOID context,PTP_TIMER work)
{
static UINT32 cnt= 0;
if(++cnt>5)CloseThreadpoolTimer(work);
int *p=static_cast<int*>(context);
cout<<"timer="<<GetCurrentThreadId()<<" "<<*p<<cnt<<endl;
//getc(stdin);
}
int _tmain()
{
INT context=0;
PTP_WORK wo= CreateThreadpoolWork(Work,&context,NULL);
SubmitThreadpoolWork(wo);Sleep(1);
SubmitThreadpoolWork(wo);Sleep(1);
SubmitThreadpoolWork(wo);Sleep(1);
context =1;
PTP_WORK w1= CreateThreadpoolWork(Work,&context,NULL);
SubmitThreadpoolWork(w1);
///WaitForThreadpoolWorkCallbacks(w1,TRUE);
WaitForThreadpoolWorkCallbacks(w1,FALSE);
PTP_TIMER t = CreateThreadpoolTimer(Timer,&context,NULL);
FILETIME due;
due.dwLowDateTime=-1;
due.dwHighDateTime=0;
SetThreadpoolTimer(t,&due,500,0);
while(1)Sleep(1000);
return 0;
}
Windows核心编程之线程池在回调函数和定时调用(定时器)
最新推荐文章于 2026-05-12 06:04:36 发布
本文通过一个具体的示例程序介绍了如何使用Windows线程池API来创建和管理线程池工作项及定时器,展示了如何通过回调函数处理任务并控制定时器的生命周期。

&spm=1001.2101.3001.5002&articleId=80315788&d=1&t=3&u=8f2b082374e34b71a7de2fcc8b91b0cf)
1329

被折叠的 条评论
为什么被折叠?



