ThreadPoolModel.h
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:3k
源码类别:

游戏

开发平台:

Visual C++

  1. #if !defined(AFX_ThreadModel_H__E26B0614_AC3A_4C15_9A41_8F10560D79E8__INCLUDED_)
  2. #define AFX_ThreadModel_H__E26B0614_AC3A_4C15_9A41_8F10560D79E8__INCLUDED_
  3. //ThreadModel.h: interface for the CThreadModel class.
  4. //功能描述:该类是线程池模型类该类不能定义任何数据,所以只能从该类派生新类。
  5. #include "GlobThread.h"
  6. #include "afxwin.h"
  7. #if _MSC_VER > 1000
  8. #pragma once
  9. #endif // _MSC_VER > 1000
  10. typedef UINT lpCallBack (LPVOID lpParam);
  11. typedef void lpCallBack1 (LPVOID lpParam);
  12. enum
  13. {
  14. SUCCESS_THREADPOOL=1,
  15. ERROR_THREAOOL,//其他错误
  16. ERROR_ENTRANCE_FALSE,//入口参数错误
  17. ERROR_THREADPOOL_FULL,//线程达到最大数量
  18. };
  19. enum//线程退出的一些返回码
  20. {
  21. SUCCESS_THREAD_RETURN,
  22. ERROR_THREAD_RETURN,
  23. ERROR_GLOBPOOL_NULL,
  24. ERROR_LPPARAM_NULL,
  25. ERROR_MULTIPLEEVENT_WAIT
  26. };
  27. class CThreadPoolModel  
  28. {
  29. private:
  30. void InitAll(void);
  31. void DeleteAll(void);
  32. //
  33. void InitCriticalSection(void);
  34. void DestroyCriticalSection(void);
  35. void inline TPSetLastError(int nErrorNo)
  36. {
  37. ::EnterCriticalSection(&m_csErrorNo);
  38. m_nErrorNo=nErrorNo;
  39. ::LeaveCriticalSection(&m_csErrorNo);
  40. };
  41. public:
  42. CThreadPoolModel();
  43. virtual ~CThreadPoolModel();
  44. void SetCriThreadCount(int nCount);
  45. int inline GetCriThreadCount(void)
  46. {return (int)m_nCriThreadCount;};
  47. int GetMaxThreadCount(void)
  48. {return (int)m_nMaxThreadCount;};
  49. int inline GetCurAllThreadCount(void)
  50. {return (int)m_nCurAllThreadCount;};
  51. protected:
  52. virtual CString ShowThreadInfo(void);
  53. BOOL CreateNewThread(lpCallBack *pfnThrearoc,LPVOID pParam,
  54. HANDLE &hNewThread,DWORD &dwThreadId);
  55. void inline SetMaxThreadCount(int nMaxThreadCount)
  56. {m_nMaxThreadCount=nMaxThreadCount;};
  57. int inline GetCurWorkThreadCount(void)
  58. {return (int)m_nCurWorkThreadCount;};
  59. void inline SetMainWnd(HWND hMainWnd)
  60. {m_hMainWnd=hMainWnd;};
  61. HWND inline GetMainWnd(void)
  62. {return m_hMainWnd;};
  63. protected:
  64. void IncrementCurAllThreadCount(void);
  65. void DecrementCurAllThreadCount(void);
  66. void SetCurAllThreadCount(int nCount);
  67. void IncrementCurWorkThreadCount(void);
  68. void DecrementCurWorkThreadCount(void);
  69. void SetCurWorkThreadCount(int nCount);
  70. void IncrementCriThreadCount(void);
  71. void DecrementCriThreadCount(void);
  72. int inline TPGetLastError(void)
  73. {return (m_nErrorNo);};
  74. private:
  75. int m_nErrorNo;//错误号码
  76. CRITICAL_SECTION m_csErrorNo;
  77. LONG m_nMaxThreadCount;//允许线程最大数量
  78. LONG m_nCurAllThreadCount;//当前存在的线程数量
  79. LONG m_nCurWorkThreadCount;//当前工作的线程数量
  80. LONG m_nCriThreadCount;//临界线程量
  81. HWND m_hMainWnd;//主窗口句柄
  82. protected:
  83. HANDLE m_hAllDeadEvent;//死亡事件
  84. };
  85. #endif // !defined(AFX_THREADDLG_H__E26B0614_AC3A_4C15_9A41_8F10560D79E8__INCLUDED_)