C++线程池QueueUserWorkItem

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

转载自: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函数语法如下:

Jetbrains全家桶1年46,售后保障稳定

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. }  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206295.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 汇编指令B与BL_AB500编程中B指令使用

    汇编指令B与BL_AB500编程中B指令使用1.b与bl指令的作用是什么?   b与bl指令的作用:实现程序跳转,也就是调用子程序。2.b与bl指令的区别是什么?   b与bl指令的区别:b指令:简单的程序跳转,跳转到到目标标号处执行。                                 bl指令:带链接程序跳转,也就是要带返回地址。在发生跳转前,将当前PC-4保存到R14中。             …

    2022年10月21日
    0
  • Java的三种注释

    Java的三种注释Java基础是java初学者的起点,是帮助你从小白入门到精通必学基础课程!为初学者而著!Java300集>>>适合准备入行开发的零基础员学习Java,基于最新JDK13、IDEA平台讲解的,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。配套学习:Java初学者入门教程>>>Java注释:单行、多行和文档注释注释是对程序语言的说明,有助于开发者和用户之间的交流,方便理…

    2022年7月7日
    18
  • samba文件共享服务器,全网最详细的samba文件共享服务![通俗易懂]

    samba文件共享服务器,全网最详细的samba文件共享服务![通俗易懂]了解samba:1.samba是linux共享文件系统,将SMB(服务消息块)/CIFS(通用网络文件系统)协议在linux中进行实现,让linux、unix、windows系统之间可以相互访问文件共享。2.samba服务相关知识点:1samba是C/S(客户端/服务器)架构,2监听TCP/139及TCP/445(由smbd程序监听),监听UDP/137和UDP/138(由nmbd程序监听)…

    2022年9月25日
    0
  • java全局变量引起的并发问题「建议收藏」

    java全局变量引起的并发问题「建议收藏」最近刚完成了一个短彩信群发平台的开发工作,系统采用springmvc+hibernate+jdbctemplate+mysql架构。其中遇见许多问题,闲暇之余记录下来以避免在后续项目中再犯同样的错误。先看下面小段代码,一个controller,一个service。       controller.java代码:    ……..    @Autowired

    2022年8月21日
    6
  • Spring Boot2.0迁移概括

    Spring Boot2.0迁移概括首先,SpringBoot2.0需要Java8或更高版本。不再支持Java6和7了。在SpringBoot2.0中,许多配置属性被重新命名/删除,开发人员需要更新application.properties/application.yml相应的配置。为了帮助你解决这一问题,SpringBoot发布了一个新spring-boot-properties-migr…

    2022年5月27日
    62
  • 网站被挂马实用怎么解决的办法之一[通俗易懂]

    网站被挂马实用怎么解决的办法之一[通俗易懂]最近单位网站在百度搜索点击打开都是SQ电影的内容,而直接输入网址反而没问题,在百度搜索中被提示为网站被黑的可能,很多客户搜索我们网站都进入了SQ电影网站,给公司的形象造成了很大的影响,作为公司的网站技术人员,以前也算是搞了5年的老站长了,什么事没惊着,从头开始分析网站被黑的原因。

    2022年9月1日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号