| Цитата | Ну, ежели нужен велосипед
|
Можно попробывать
Вот мои классы, как этот велик приспособить?
| Код | /**************************************************************************** * класс CXThread * *****************************************************************************/
//--------------------------------------------------------------------------- //CXThread.h class CXThread { //... public: VOID (*vOnExit)(); protected: virtual UINT uiOnRun(VOID *pvParam) = 0; private: static UINT WINAPI _s_uiStartFunc(VOID *pvParam); //... }; //--------------------------------------------------------------------------- //CXThread.cpp /*static*/ UINT WINAPI CXThread::_s_uiStartFunc(VOID *pvParam) { CXThread *pthThis = static_cast<CXThread *>(pvParam); pthThis->vOnExit(); //... return uiRes; } //---------------------------------------------------------------------------
|
| Код | /**************************************************************************** * класс CXThreadPool * *****************************************************************************/
//--------------------------------------------------------------------------- //CXThreadPool.h #include <XLib/Sync/CXThread.h> //--------------------------------------------------------------------------- class CXThreadPool : public CXThread { //... protected: virtual UINT uiOnRun (VOID *pData); /*overload from CXThread*/ private: std::vector<CWorkThread *> _m_vecpthWorkThreads; VOID _vOnTest(VOID) { ::MessageBox(0, _T("Test"), _T(""), MB_OK); } //... }; //--------------------------------------------------------------------------- //CXThreadPool.cpp UINT CXThreadPool::uiOnRun(VOID *pData) { //... CXThreadPool *pthTemp = new CXThreadPool(); _m_vecpthWorkThreads.at(_m_uiCurrTask) = pthTemp; _m_vecpthWorkThreads.at(_m_uiCurrTask)->vOnExit = &CXThreadPool::_vOnTest; /*<<< здесь ругается: Error 1 error C2440: '=' : cannot convert from 'void (__thiscall CXThreadPool::* )(void)' to 'void (__cdecl *)(void)' */ _m_vecpthWorkThreads.at(_m_uiCurrTask)->bCreate(); _m_vecpthWorkThreads.at(_m_uiCurrTask)->bResume();
_m_uiCurrTask ++;
//...
return uiRes; } //---------------------------------------------------------------------------
|
|