#pragma once #include class CThreadPool { public: template static void QueueUserWorkItem(void (T::*function)(void), T *object, ULONG flags = WT_EXECUTELONGFUNCTION) { typedef std::pair CallbackType; std::auto_ptr p(new CallbackType(function, object)); if (::QueueUserWorkItem(ThreadProc, p.get(), flags)) p.release(); else throw GetLastError(); } private: template static DWORD WINAPI ThreadProc(PVOID context) { typedef std::pair CallbackType; std::auto_ptr p(static_cast(context)); (p->second->*p->first)(); return 0; } };