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)
上一篇 2025年8月7日 下午10:43
下一篇 2025年8月7日 下午11:22


相关推荐

  • tracert原理及其实现_tracert第一个地址是什么

    tracert原理及其实现_tracert第一个地址是什么Tracert用于测试数据包从发送主机到目的地所经过的网关,它主要用于检查网络连接是否可达,以及分析网络什么地方发生了故障.Tracert的执行过程是:首先发送一个TTL为1的数据包,因此第一跳发送回一个ICMP错误消息以指明此数据包不能被发送(因为TTL超时)之后此数据包被重新发送,TTL为2,同样第二跳返回TTL超时,这个过程不断进行,直到到达目的地.执行这些过程的目的是记录每一个ICM

    2026年3月11日
    5
  • QTableWidget_qt tabwidget

    QTableWidget_qt tabwidgetQTabWidget#include”tab.h”Tab::Tab(QWidget*parent) :QMainWindow(parent){ ui.setupUi(this); tabWidget=newQTabWidget(); tabWidget->setParent(this); //新建第一个页面的部件 QWidget*widget=new…

    2025年12月8日
    7
  • 智谱AI语音交互新突破:GLM-4-Voice-9B量化版深度评测与本地化部署指南

    智谱AI语音交互新突破:GLM-4-Voice-9B量化版深度评测与本地化部署指南

    2026年3月12日
    2
  • 10款常见网络安全工具

    10款常见网络安全工具网络管理员有必要了解自己的网络 以便为更有效地防护网络 对安全专业人士来说 最有用的格言之一就是 知己知彼 而说到网络安全 想知己知彼 最基本的任务就是发现网络资产 绘制网络图 要是没有最新的网络图和资产清查列表 就很难了解自己要保护什么对象 下面这些工具有助于简化这个过程 除了花点时间外 几乎不需要什么费用 Open AudITOpen AudIT 是一款网络发现 清查和审

    2026年3月26日
    2
  • coalesce 函数

    coalesce 函数COALESCE 是一个函数 expression 1 expression 2 expression n 依次参考各参数表达式 遇到非 null 值即停止并返回该值 如果所有的表达式都是空值 最终将返回一个空值 selectcoales null 2 3 Return2selec null null 3 Return3selec

    2026年3月17日
    2
  • selenium+webdriver_python爬虫安装

    selenium+webdriver_python爬虫安装1、下载地址:https://chromedriver.chromium.org/downloads根据谷歌浏览器的版本选择地址,一定要选择对应的版本,选择错误无法运行程序。如果找不到对应的版本,可以把谷歌浏览器更新到最新的版本,然后下载页面第一个程序(最新)2、安装步骤①将下载到的文件解压,应当只有一个EXE文件②将该文件拷贝一份放到谷歌浏览器目录下,找到快捷方式【打开所在目录】即可③将该文件再拷贝一份放到Python编译器目录下如图2所示。图1将文件放到谷歌浏览器目录下图2将文

    2026年1月23日
    6

发表回复

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

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