#include #include #include #include #include"CLStatus.h" #include"CLLogger.h" using namespace std; class CMyFunction { public: CLStatus RunExecutiveFunction(void *pContext) { long i = (long)pContext; cout << i << endl; return CLStatus(0, 0); } }; class CLThread { public: template CLStatus Create() { pthread_t tid; int r = pthread_create(&tid, NULL, StartFunctionOfThread, this); if(r != 0) { CLLogger::WriteLogMsg("pthread_create error", r); return CLStatus(-1, 0); } return CLStatus(0, 0); } template static void* StartFunctionOfThread(void *pContext) { TDerivedClass *pThis = static_cast(pContext); pThis->ProcessByProxy(); return 0; } }; template class CLCoordinator : public TExecutive, public TExecutiveFunctionProvider { public: CLStatus Run(void *pContext) { m_pContext = pContext; TExecutive *pExecutive = static_cast(this); typedef CLCoordinator T; return (*pExecutive).template Create(); } void ProcessByProxy() { TExecutiveFunctionProvider *pProvider = static_cast(this); pProvider->RunExecutiveFunction(m_pContext); } private: void *m_pContext; }; int main() { CLCoordinator t1; t1.Run((void *)5); sleep(5); return 0; }