0001: #ifndef __CTHREAD_H_
0002: #define __CTHREAD_H_
0003: 
0004: #include "..\..\stdafx.h"
0005: 
0006: namespace MySystem{
0007: // ---------------------------------------------------------------------------
0008: // スレッド処理
0009: // ---------------------------------------------------------------------------
0010: 
0011: // データの状態
0012: typedef enum
0013: {
0014:     THREAD_DEAD=0,
0015:     THREAD_WAIT,
0016:     THREAD_RUN,
0017: }THREAD_STATE;
0018: 
0019: // ---------------------------------------------------------------------------
0020: // スレッドのデータクラス
0021: // ---------------------------------------------------------------------------
0022: class CThreadData
0023: {
0024: private:
0025:     void         *m_pData;
0026:     THREAD_STATE  m_iState;
0027: public:
0028:     CThreadData() : m_iState(THREAD_DEAD), m_pData(NULL){}
0029: 
0030:     THREAD_STATE GetState() const {return m_iState;}
0031:     void SetState( THREAD_STATE s ) {m_iState = s;}
0032:     void Finish() {SetState(THREAD_DEAD);}  // 処理が終わりました
0033: 
0034:     void *GetData() const {return m_pData;}
0035:     void SetData( void *p ) {m_pData = p;}
0036: };
0037: 
0038: // ---------------------------------------------------------------------------
0039: // スレッドの管理クラス
0040: // ---------------------------------------------------------------------------
0041: class CThreadMgr
0042: {
0043: private:
0044:     enum
0045:     {
0046:         THREAD_MAX = 2,           // 最大スレッド数(CPUの数と同じ程度)
0047:         THREAD_WORK_MAX = 16,     // スレッドに流し込める仕事の数
0048:     };
0049: 
0050:     HANDLE      *m_hThread;       // スレッドのハンドル
0051:     CThreadData *m_pThread;       // スレッドのデータ
0052:     bool         m_bThreadEnable; // 終了したかどうか
0053:     int          m_ThreadMax;
0054:     int          m_WorkMax;
0055: 
0056: public:
0057:      CThreadMgr( unsigned ( __stdcall *func )( void * )
0058:                 , int thread_max  // 最大スレッド数(CPUの数と同じ程度)
0059:                 , int work_max ); // スレッドに流し込める仕事の数
0060:      ~CThreadMgr();
0061: 
0062:     // 実行リクエスト
0063:     int Req( void *pData );       // スレッドに仕事のリクエストをする
0064:     int GetLeftWork();               // まだ仕事が残ってる?
0065: 
0066:     // 呼び出される関数でつかう関数
0067:     CThreadData *GetWork();       // 仕事をとってくる
0068:     bool IsEnable() const {return m_bThreadEnable;}
0069: };
0070: }//namespace MySystem;
0071: 
0072: #endif // !__CTHREAD_H_
0073: 
0074: