#include "stdafx.h"
#include <Windows.h>
void WINAPI FunCallBackForWork(PTP_CALLBACK_INSTANCE pInstance, PVOID Context, PTP_WORK pwork)
{
printf("%d\n", *(int*)Context);
return;
}
void WINAPI FunCleanGroupCancelCallback(PVOID pvObjectContext, PVOID pvCleanupContext)
{
printf("%s", "szn\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
//創建一個執行緒池,CreateThreadPool()函式的第一個引數是保留的,必須傳入NULL
PTP_POOL pool = CreateThreadpool(NULL);
//設定執行緒池允許允許的執行緒的最大值和最小值
SetThreadpoolThreadMaximum(pool, 3);
SetThreadpoolThreadMinimum(pool, 1);
//定義一個回呼環境
TP_CALLBACK_ENVIRON pcbe;
//初始化回呼環境
InitializeThreadpoolEnvironment(&pcbe);
//設定與回呼環境關聯的執行緒池物件
SetThreadpoolCallbackPool(&pcbe, pool);
int Value = 10;
//創建一個顯示控制的作業項
PTP_WORK pWork = CreateThreadpoolWork(FunCallBackForWork, &Value, &pcbe);
//提交3個作業項
SubmitThreadpoolWork(pWork);
SubmitThreadpoolWork(pWork);
SubmitThreadpoolWork(pWork);
//下面代碼為執行緒池的銷毀
PTP_CLEANUP_GROUP CleanGroup = CreateThreadpoolCleanupGroup();
SetThreadpoolCallbackCleanupGroup(&pcbe, CleanGroup, FunCleanGroupCancelCallback);
CloseThreadpoolCleanupGroupMembers(CleanGroup, TRUE, NULL);
CloseThreadpoolCleanupGroup(CleanGroup);
DestroyThreadpoolEnvironment(&pcbe);
CloseThreadpool(pool);
CloseThreadpoolWork(pWork);
return 0;
}
程式運行結果如下:
FunCallBackForWork()沒有被呼叫, FunCleanGroupCancelCallback()函式也沒被呼叫
疑惑點:既然FunCallBackForWork()沒被呼叫說明已提交的作業項尚未被處理,然后在關閉作業組的時候CloseThreadpoolCleanupGroupMembers()函式傳入TRUE,并且SetThreadpoolCallbackCleanupGroup()函式的回呼函式不設為NULL,表示對每一個被取消的作業項回呼函式都將被呼叫,但是程式結果是回呼函式FunCleanGroupCancelCallback()并沒有被呼叫,這是為什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85981.html
下一篇:著急呢
