C++线程池QueueUserWorkItem

转载自:http://blog.csdn.net/feigeswjtu/article/details/9984871

个人备注:这个人转载了很多vc,windows,opencv等等相关的文章,进行了分类,可以参考。

MSDN 函数说明

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684957(v=vs.85).aspx


在计算机程序中,线程是一种很重要的资源,使用的恰当可以极大的提高程序的效率,也就是多线程的使用,但是多线程会让应用程序变得异常复杂,会占用大量的系统资源。就像QQ表情一样,每一个QQ表情的闪动都需要构建一个线程,如果用户使用了大量的表情(GIF),将会有多少个线程在运行,系统的性能将大大减少,甚至导致死机。在这种情况下,多线程变得不太合适了,那么什么机制适用于这种情况下呢,这就是线程池。

通常情况下,应用程序中采用异步调用函数的形式来实现多任务,在windows中,系统提供了QueueUserWorkItem函数实现异步调用,这个函数相当于在线程池中建立多个用户工作项目,跟普通线程机制一样,线程池也有线程的同步等机制。查MSDN,可看到QueueUserWorkItem函数语法如下:

 

BOOL WINAPI QueueUserWorkItem(
  __in      LPTHREAD_START_ROUTINE Function,
  __in_opt  PVOID Context,
  __in      ULONG Flags
);

Function就是用户定义的函数,context是P指针,也是Function的参数,Flags表示一组标志值,作用可通过查MSDN看到,这里就不在叙述。

下面实现了一个简单的线程池程序,没有什么大的功能,可以看到线程池的用法。

[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <assert.h>  
  3. #include <Windows.h>  
  4. #include <string>  
  5. using namespace std;  
  6. DWORD WINAPI TestThreadPool1(PVOID pContext);  
  7. DWORD WINAPI TestThreadPool2(PVOID pContext);  
  8. DWORD WINAPI TestThreadPool3(PVOID pContext);  
  9.   
  10. CRITICAL_SECTION g_cs;  
  11.   
  12. int main(int argc, char * argv[])  
  13. {  
  14.   
  15.     QueueUserWorkItem(TestThreadPool1, L"Hello World", WT_EXECUTEDEFAULT);  
  16.     QueueUserWorkItem(TestThreadPool2, L"Hello World", WT_EXECUTEDEFAULT);  
  17.     QueueUserWorkItem(TestThreadPool3, L"Hello World", WT_EXECUTEDEFAULT);  
  18.     getchar();  
  19.     return 0;  
  20. }  
  21.   
  22. DWORD WINAPI TestThreadPool1(PVOID pContext)  
  23. {  
  24.   
  25.     for(int i=0;i<=100;i++)  
  26.     {  
  27.         cout<<"One Thread is : "<<i<<endl;  
  28.     }  
  29.       
  30.     return 0;  
  31. }  
  32. DWORD WINAPI TestThreadPool2(PVOID pContext)  
  33. {  
  34.   
  35.     for(int i=0;i<=100;i++)  
  36.     {  
  37.         cout<<"Two Thread is : "<<i<<endl;  
  38.     }  
  39.     return 0;  
  40. }  
  41. DWORD WINAPI TestThreadPool3(PVOID pContext)  
  42. {  
  43.   
  44.     for(int i=0;i<=100;i++)  
  45.     {  
  46.         cout<<"Three Thread is : "<<i<<endl;  
  47.     }  
  48.     return 0;  
  49. }  


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值