C++线程池实现_java线程池状态

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

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

Jetbrains全系列IDE稳定放心使用

在计算机程序中,线程是一种很重要的资源,使用的恰当可以极大的提高程序的效率,也就是多线程的使用,但是多线程会让应用程序变得异常复杂,会占用大量的系统资源。就像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看到,这里就不在叙述。

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

#include <iostream>
#include <assert.h>
#include <Windows.h>
#include <string>
using namespace std;
DWORD WINAPI TestThreadPool1(PVOID pContext);
DWORD WINAPI TestThreadPool2(PVOID pContext);
DWORD WINAPI TestThreadPool3(PVOID pContext);

CRITICAL_SECTION g_cs;

int main(int argc, char * argv[])
{

	QueueUserWorkItem(TestThreadPool1, L"Hello World", WT_EXECUTEDEFAULT);
	QueueUserWorkItem(TestThreadPool2, L"Hello World", WT_EXECUTEDEFAULT);
	QueueUserWorkItem(TestThreadPool3, L"Hello World", WT_EXECUTEDEFAULT);
	getchar();
	return 0;
}

DWORD WINAPI TestThreadPool1(PVOID pContext)
{

	for(int i=0;i<=100;i++)
	{
		cout<<"One Thread is : "<<i<<endl;
	}
	
	return 0;
}
DWORD WINAPI TestThreadPool2(PVOID pContext)
{

	for(int i=0;i<=100;i++)
	{
		cout<<"Two Thread is : "<<i<<endl;
	}
	return 0;
}
DWORD WINAPI TestThreadPool3(PVOID pContext)
{

	for(int i=0;i<=100;i++)
	{
		cout<<"Three Thread is : "<<i<<endl;
	}
	return 0;
}

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

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

(0)
上一篇 2026年3月10日 下午3:15
下一篇 2026年3月10日 下午3:43


相关推荐

  • 32.HttpRequest对象的学习

    32.HttpRequest对象的学习引言——在前面你也跟着本博主编写了那么多的视图函数,但是每个视图函数它都会接收一个名为request的参数。是不是很好奇:视图函数接收到的request到底是个什么对象!!!HttpRequest对象1.我们可以打印这个request对象,看一下:<WSGIRequest:GET’/music/test3/’>我们知道WSGIRequest是一个HTTP请求对象,里面包括了提交的方式和URL路径。综上可知:服务器接收到http协议的请求后,会根据报文创建HttpReq.

    2022年6月30日
    23
  • 安卓实现扫码登录_安卓登录界面

    安卓实现扫码登录_安卓登录界面首先不妨先看下Android:扫描二维码登陆原理:大概总结下这个过程就是:服务器生成全局唯一会话ID,并返回二维码、过期时间;用户扫描二维码,提交改会话ID,用户基本信息到服务器;PC端在过期时间内一直轮询,如果用户扫码,服务器记录状态,PC端跳转到已登录页面;那不妨按照这个思路来写一个简单的Demo。1.后台首先,我们需要搭建一个简易版的后台。在IDEA中创建SpringBoot项目,然后添加thymeleaf和session的依赖:<dependency> <

    2025年6月2日
    6
  • webpack es6转es5原理_webpack和vue cli区别

    webpack es6转es5原理_webpack和vue cli区别首先下载babel-loadernpminstall–save-devbabel-loader@7babel-corebabel-preset-es2015要在最外部输入指令不然会报错然后在webpack.config.js中写相关代码{test:/\.js$/,exclude:/(node_modules|bower_components)/,use:{

    2026年3月9日
    9
  • 其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频02 – 安装准备篇

    其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频02 – 安装准备篇简要流程:1、装.netframework2.0,装好了推荐重启下。2、安装MeGUI,安装界面神奇的是中文,我想不会有人有问题吧。3、启动MeGUI。第一次运行会自动搜索编码器升级。可以看到除了主程序都是在这里下载的,泪。点击Update,慢慢等吧。在升级过程中会提示你导入需要的配置方案,其中我们只需要PSP相关的…

    2022年10月16日
    4
  • linux卸载eclipse,ubuntu卸载eclipse[通俗易懂]

    linux卸载eclipse,ubuntu卸载eclipse[通俗易懂]1.安装JDK6先确认已经添加了软件源,在系统-系统管理-软件源-其它软件,确保已经选中http://archive.canonical.com/ubuntulucidpartner这个源。sudoapt-getinstallsun-java6-jdk设置系统环境变量exportJAVA_HOME=/usr/lib/jvm/java-6-sun(根据具体的安装路径)expor…

    2022年5月29日
    60
  • 什么是软件的灰度测试,什么是灰度测试

    什么是软件的灰度测试,什么是灰度测试灰度测试是什么意思呢 如果对互联网软件研发行业不太了解的话 可能对这个词还是很陌生的 下面就说说什么是灰度测试 什么是灰度测试 1 灰度测试指的是在同一个时间段内 存在两个不同的应用版本 一个版本叫做黑色版本 而另一个版本叫做白色版本 然后通过观测两个同时存在的版本的表现来调整黑色版本和白色版本的比例 如果一切顺利 渐渐地就把所有用户的应用从黑色版本过渡到白色版本 而这种通过共存黑白版本的手段进行

    2026年3月18日
    3

发表回复

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

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