C++线程池QueueUserWorkItem

原创 2013年08月15日 16:07:52

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

c++线程池操作

  • 2016年12月15日 11:27
  • 20.44MB
  • 下载

linux c++线程池的实现

线程池的原理大家都知道,直接上代码了^_^ Thread.h [cpp] view plaincopyprint? #ifndef __THREAD_H   #defin...

threadpool c++ 线程池

  • 2012年07月18日 16:30
  • 29KB
  • 下载

简单linux C++线程池

  • 2013年01月29日 08:35
  • 2KB
  • 下载

c++ 11 多线线程系列-------- 一个最简单而且实用的线程池

至于什么是线程池,线程池是干神马的,大家自己网上查阅一下。 #include #include #include #include #include #include #inc...

基于win32的C++线程池实现(改进版)

  • 2017年12月11日 11:07
  • 290KB
  • 下载

C++ 线程池示例,VS2015编译通过

  • 2017年10月31日 14:20
  • 5KB
  • 下载

C++11多线程(十八):线程池

1.三方库及操作系统库实现线程池: 线程池的实现有很多,使用BOOST,WINDOWS,LINUX库,参考链接:http://www.cnblogs.com/lizhenghn/p/3740186.h...

线程池(C/C++版)

  • 2015年02月16日 11:20
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++线程池QueueUserWorkItem
举报原因:
原因补充:

(最多只允许输入30个字)