您的位置:首页 >> 编程开发 >> Visual C++ >> 进程和线程 >> 正文
进程和线程 RSS
 

一个好用的线程池

http://www.rdxx.com 04年11月17日 12:12 Blog 我要投稿

关键词: 线程池

类定义如下

// ThreadPoolImp.h: interface for the ThreadPoolImp class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_THREADPOOLIMP_H__82F4FC7E_2DB4_4D2A_ACC8_2EFC787CAE42__INCLUDED_)
#define AFX_THREADPOOLIMP_H__82F4FC7E_2DB4_4D2A_ACC8_2EFC787CAE42__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#pragma warning( disable : 4705 4786)

#include <map>
#include "AutoLock.h"

using namespace std;

class IJobDesc;
class IWorker;

class CThreadPoolImp 
{
public:
 class ThreadInfo
 {
 public:  
  ThreadInfo() { m_hThread=0; m_bBusyWorking=false; }
  ThreadInfo(HANDLE handle, bool bBusy) { m_hThread=handle; m_bBusyWorking=bBusy; }
  ThreadInfo(const ThreadInfo& info) { m_hThread=info.m_hThread; m_bBusyWorking=info.m_bBusyWorking; }
 ////////
  HANDLE m_hThread;
  bool m_bBusyWorking;
 };

 typedef map<DWORD,ThreadInfo> ThreadInfoMap;
 typedef ThreadInfoMap::iterator  Iterator_ThreadInfoMap;
 
 friend static unsigned int CThreadPoolImp::ManagerProc(void* p);
 friend static unsigned int CThreadPoolImp::WorkerProc(void* p);
protected:
 enum ThreadPoolStatus { BUSY, IDLE, NORMAL };
public:
 //interface to the outside
 void Start(unsigned short nStatic, unsigned short nmax);
 void Stop(bool bHash=false);
 void ProcessJob(IJobDesc* pJob, IWorker* pWorker) const;

 //constructor and destructor
 CThreadPoolImp();
 virtual ~CThreadPoolImp();

protected:
 //interfaces public:
 HANDLE GetMgrIoPort() const { return m_hMgrIoPort; }
 UINT GetMgrWaitTime() const { return 1000; }
 HANDLE GetWorkerIoPort() const { return m_hWorkerIoPort; }

private:
 static DWORD WINAPI ManagerProc(void* p);
 static DWORD WINAPI WorkerProc(void* p);
protected:
 //manager thread
 HANDLE m_hMgrThread;
 HANDLE m_hMgrIoPort;
protected:
 //configuration parameters
 mutable unsigned short m_nNumberOfStaticThreads;
 mutable unsigned short m_nNumberOfTotalThreads;

protected:
 //helper functions
 void AddThreads();
 void RemoveThreads();
 ThreadPoolStatus GetThreadPoolStatus();
 void ChangeStatus(DWORD threadId, bool status);
 void RemoveThread(DWORD threadId);

protected:
 //all the work threads
 ThreadInfoMap m_threadMap;
 CCriticalSection m_arrayCs;
 HANDLE m_hWorkerIoPort;
};

#endif // !defined(AFX_THREADPOOLIMP_H__82F4FC7E_2DB4_4D2A_ACC8_2EFC787CAE42__INCLUDED_)


实现如下


// ThreadPool.cpp: implementation of the CThreadPoolImp class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ThreadPoolimp.h"
#include "outdebug.h"
#include <assert.h>
#include "work.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
//#define new DEBUG_NEW
#endif

CThreadPoolImp::CThreadPoolImp()
{
}

CThreadPoolImp::~CThreadPoolImp()
{

}

void CThreadPoolImp::Start(unsigned short nStatic, unsigned short nMax)

共5页  第1页 第2页 第3页 第4页 第5页

 
 
标签: 线程池 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站