diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 5858b3e..aae74d1 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -1067,6 +1067,94 @@ namespace ZNsMain -- 2012-09-20 09:46:00 + ■ 해당 코드는 대충 이렇다.-- 2025-09-28 02:41 + + template< typename TWork , + typename TWorkExec , // 작업(TWork)에 대하여 어떤 처리를 하는 클래스 + typename TWorkArg =const TWork& , + typename TBarrier =std::CBarrier_T<> , // 작업 쓰레드의 시작 및 종료 대기 barrier + typename TSyncWait =std::CThreadSemaphore, + typename TSyncExec =std::CDefLockEasy , + typename TWorkList =NsCPP::CObjList , // 작업 큐 컨테이너 + typename TTypeBase =NsIFace::CAllocWork_BASE_T, + typename TFetchWork=TWorkList , // 작업 큐에서 작업을 가져오는 컨테이너. + typename TTypeCRTP =std::NsType::CTypeCRTP2_T< NsIFace::ICtrlAllocWork, NsIFace::ICtrlAllocWork > + > + class CTypeCtrlAllocWork_T ////////////////////////////////////////////////////////////////////////////////// + { + public: + + class CThread ; + class CBaseClass; + + typedef TWork CWork ; + typedef TWorkArg CWorkArg ; + typedef TWorkExec CWorkExec ; + typedef TBarrier CBarrier ; + typedef TSyncWait CSyncWait ; + typedef TSyncExec CSyncExec ; + typedef TWorkList CWorkList ; + typedef TFetchWork CFetchWork; + typedef TTypeCRTP CTypeCRTP ; + + typedef typename TWorkList::TypeAlloc CAlloc ; + typedef std::CAutoKey_T CAutoKey ; + typedef NsCPP::CObjList + < + CThread , + const CThread&, + CAlloc + > CThreadList; + typedef typename CThreadList::CLink CThreadLink; + + + #define _CAllocWork_BASE_ std::CAllocWork_T< \ + CWork , \ + CWorkArg , \ + CSyncWait , \ + CSyncExec , \ + CWorkList , \ + CThread , \ + CBaseClass , \ + std::NsType::CTypeCRTP_T > + + class CAllocWork : public _CAllocWork_BASE_ + { + // some code + } + }; + + + template + class CCtrlAllocWork_T : protected TTypeCtrlAllocWork::CSyncKey , + protected TTypeCtrlAllocWork::CAllocWork, + protected TTypeCtrlAllocWork::CTypeCRTP::TypeBase + { + public : + enum{EMaxThreadCnt=1}; typedef NsEnum::EThreadPoolStep EPoolStep; + public : + typedef typename TTypeCtrlAllocWork::CWork CWork ; + typedef typename TTypeCtrlAllocWork::CWorkArg CWorkArg ; + typedef typename TTypeCtrlAllocWork::CWorkExec CWorkExec ; + typedef typename TTypeCtrlAllocWork::CThread CThread ; + typedef typename TTypeCtrlAllocWork::CSyncKey CSyncKey ; + typedef typename TTypeCtrlAllocWork::CSyncExec CSyncExec ; + typedef typename TTypeCtrlAllocWork::CAutoKey CAutoKey ; + typedef typename TTypeCtrlAllocWork::CAllocWork CAllocWork ; + typedef typename TTypeCtrlAllocWork::CBaseClass CBaseClass ; + typedef typename TTypeCtrlAllocWork::CWorkList CWorkList ; + typedef typename TTypeCtrlAllocWork::CFetchWork CFetchWork ; + typedef typename TTypeCtrlAllocWork::CThreadList CThreadList; + typedef typename TTypeCtrlAllocWork::CThreadLink CThreadLink; + typedef typename TTypeCtrlAllocWork::CTypeCRTP CTypeCRTP ; + + // 이후 아래 코드로 + // + // typedef typename CTypeCRTP::TypeData CCtrlAllocWorkEx; + // + // CCtrlAllocWork_T 의 상속 클래스에 접근할 수 있다. + } + //////////////////////////////////////////////////////////////////////////////////////////*/