kevin55

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 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

posted on 2015-05-27 13:21  kernel_main  阅读(754)  评论(0编辑  收藏  举报