线程池之预提交work item

来源:互联网 发布:五轴加工中心编程难吗 编辑:程序博客网 时间:2024/05/10 16:04
#include "stdafx.h"#include <conio.h>#include <iostream>#include <algorithm>#include <vector>using namespace std;VOID NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pvContext){cout << "[ " << GetCurrentThreadId() << " ]" << " simpleCallback\n";}CRITICAL_SECTION g_cs;const int totalWorkItems = 100000;PTP_WORK pWorks[totalWorkItems];DWORD g_ThreadIds[totalWorkItems] = { 0 };VOID CALLBACK WorkItemCallback(PTP_CALLBACK_INSTANCE Instance, PVOID pvContex, PTP_WORK Work){EnterCriticalSection(&g_cs);cout << "[ " << (g_ThreadIds[int(pvContex)] = GetCurrentThreadId()) << " ]" << "WorkItemCallback(), params = " << (int)pvContex << endl;LeaveCriticalSection(&g_cs);}void WaitKbhit(){while(!_kbhit());}int _tmain(int argc, _TCHAR* argv[]){for (int i = 0; i < totalWorkItems; ++i){pWorks[i] = CreateThreadpoolWork(&WorkItemCallback, (PVOID)i, NULL);}InitializeCriticalSection(&g_cs);for (int i = 0; i < totalWorkItems; ++i){SubmitThreadpoolWork(pWorks[i]);}WaitKbhit();sort(g_ThreadIds, g_ThreadIds + totalWorkItems);vector<DWORD> vThreadIds;unique_copy(g_ThreadIds, g_ThreadIds + totalWorkItems, back_inserter(vThreadIds));copy(vThreadIds.begin(), vThreadIds.end(), ostream_iterator<DWORD>(cout, ", "));cout << "\n total thread ids = " << vThreadIds.size() << endl;DeleteCriticalSection(&g_cs);return 0;}

原创粉丝点击