1 class CThreadPool 2 { 3 public: 4 5 template <typename T> 6 static void QueueUserWorkItem(void (T::*function)(void), 7 T *object, ULONG flags = WT_EXECUTELONGFUNCTION) 8 { 9 typedef std::pair<void (T::*)(), T *> CallbackType; 10 std::auto_ptr<CallbackType> p(new CallbackType(function, object)); 11 12 if (::QueueUserWorkItem(ThreadProc<T>, p.get(), flags)) 13 { 14 // The ThreadProc now has the responsibility of deleting the pair. 15 p.release(); 16 } 17 else 18 { 19 throw GetLastError(); 20 } 21 } 22 23 private: 24 25 template <typename T> 26 static DWORD WINAPI ThreadProc(PVOID context) 27 { 28 typedef std::pair<void (T::*)(), T *> CallbackType; 29 30 std::auto_ptr<CallbackType> p(static_cast<CallbackType *>(context)); 31 32 (p->second->*p->first)(); 33 return 0; 34 } 35 };
https://code.msdn.microsoft.com/vstudio/CppWindowsService-cacf4948/sourcecode?fileId=21604&pathId=1789278805