1、/线程池满JADE_THREAD_ERROR_STOP0x00000002/该线程以停止JADE_THREAD_ERROR_USED0x00000003/指定的线程被占用JADE_LOCAL_MODEL0x00000010/JADE_THREAD_CREATED0x00000004/线程已创建JADE_THREAD_FAIL0x00000005/失败JADE_THREAD_FALSE0x00000006/异常错误JADE_THREAD_KILLED0x00000007/已删除JADE_ALLOC_LOCAL0x00000008/TLS内存处理方式JADE_ALLOC_GLOBAL0x00000
2、009/全局内存分配方式JADE_FALSE/操作错误JADE_MANAGE_FILOJADE_SUCCEEDED(dwStatus)(DWORD)(dwStatus)=0)/*-功能说明:任务处理基类使用者,请从该类进行子类化的派生。每个抽象类必须实现TaskProc方法以便Jade_ThreadPool调用您所需要的处理过程。方法说明:TaskProc处理过程OtherProc保留处理过程参数:LPVOIDpParam目前为该任务类的this指针DWORDdwID该任务类所占用的线程ID-*/classJade_TaskBasepublicJade_TaskBase(void);virtu
3、alJade_TaskBase(void)public:TaskProc(LPVOIDpParam,DWORDdwID)=0;OtherProc(LPVOIDdwOther);JADE_THREAD_Hwindows.hJade_config_Thread_pool.h/*-功能描述:一个线程的抽象表现,实现:运行、停止、重起、建立,销毁、-*/Jade_ThreadByEventJade_ThreadByEvent();Jade_ThreadByEvent();enumThreadStatusTLS_RUN1,TLS_STOP,TLS_KILL;Create(DWORDdwStackSize
4、,DWORDdwReturn0,DWORDdwLevel0,Jade_TaskBase*pTaskNULL);voidSetTimeOut(DWORDdwTimeINFINITE);/是否需要?GetThreadRunTime(double&dwTime);/取得线程运行时间Run(Jade_TaskBase*pTask);Stop();Restart();Kill();CheckState(DWORDdwState);ResetTask(Jade_TaskBaseSetPriority(DWORDdwLevel);private:staticCALLBACKThreadProc(LPVOID
5、lpParam);FilterCode(DWORDdwErrCode,LPVOIDlpVoid);Abend(DWORDdwCode0);HANDLEm_hThread;/线程的实现描述m_hEvent3;/2-运行、1-停止、0-结束(线程状态)m_hWaitEvent2;/0-停止、1-结束(等待返回确认状态)*m_pTask;/所要执行的任务m_dwReturn;/该线程的返回值m_dwID;/线程IDm_dwState;/线程状态m_dwTimeOut;/线程执行超时m_dwLevel;/运行级别defined(_JADE_THREADPOOL_INLINE_)Jade_ThreadB
6、yEvent.inl/*_JADE_THREAD_INLINE_*/#endifstdafx.htime.hJade_ThreadByEvent.h!Jade_ThreadByEvent:Jade_ThreadByEvent():m_hThread(NULL),m_pTask(NULL),m_dwReturn(0),m_dwID(0),m_dwState(0),m_dwTimeOut(INFINITE)m_hEvent0CreateEvent(NULL,TRUE,FALSE,LocalThread_Run);m_hEvent1LocalThread_Stopm_hEvent2LocalThre
7、ad_Killm_hWaitEvent0LocalReturnStopm_hWaitEvent1KillJade_ThreadByEvent()/KillThreadEventfor(inti=0;i)/*-重新设置线程的任务任务体-*/charchCode64dwResultsprintf(chCode,ExceptCodeis%d,dwResult);OutputDebugString(chCode);JADE_THREAD_FALSE;dwTime)m_dwTimeOutdwTime;/*-线程实现体Jade_Thread指针WaitForMultipleObjects有检查顺序所以运行
8、状态要靠后,结束等待状态设置比较靠前-*/lpParam)Jade_ThreadByEvent*pThisstatic_cast(lpParam);pThis-hEvent3memcpy(hEvent,pThis-m_hEvent,sizeof(hEvent);dwStateintnOtherclock_ttStart=0,tFinishLOOP:WaitForMultipleObjects(3,hEvent,FALSE,pThis-m_dwTimeOut);switch(dwState)WAIT_OBJECT_0+2:/Runm_pTask-TaskProc(pThis-m_pTask,pThis-1:/StopSuspendThread(pThis-m_hThread);/由于是线程内停止所以因该只能被执行一次0:/KillTLS_KILL;SetEvent(pThis-m_hWaitEvent1)?m_dwReturn:WAIT_FAILED:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1