📄 template.h
字号:
namespace ThreadTemplate
{
template<class C, class R>
class bind1
{
C* __m_pThis_;
typedef R (C::* _callfn_)();
_callfn_ __m_callfn_;
public:
bind1(C* pThis, _callfn_ fn)
{
__m_pThis_ = pThis;
__m_callfn_ = fn;
}
R Run()
{
return ((*__m_pThis_).*(__m_callfn_))();
}
};
template<class C, class R, class P>
class bind2
{
C* __m_pThis_;
typedef R (C::* _callfn_)(P);
_callfn_ __m_callfn_;
P ____m_p;
public:
bind2(C* pThis, _callfn_ fn, P p)
{
____m_p = p;
__m_pThis_ = pThis;
__m_callfn_ = fn;
}
R Run()
{
return ((*__m_pThis_).*(__m_callfn_))(____m_p);
}
};
template<class C, class R, class P, class P2>
class bind3
{
C* __m_pThis_;
typedef R (C::* _callfn_)(P, P2);
_callfn_ __m_callfn_;
P ____m_p1;
P2 ____m_p2;
public:
bind3(C* pThis, _callfn_ fn, P p1, P2 p2)
{
____m_p1 = p1;
____m_p2 = p2;
__m_pThis_ = pThis;
__m_callfn_ = fn;
}
R Run()
{
return ((*__m_pThis_).*(__m_callfn_))(____m_p1, ____m_p2);
}
};
template<class C, class R>
class __Thread__
{
public:
static DWORD WINAPI Thread(LPVOID lp)
{
typedef bind1<C, R> bind;
bind* pThis = (bind*)lp;
pThis->Run();
delete pThis;
return 0;
}
};
template<class C, class R, class P>
class __Thread2__
{
public:
static DWORD WINAPI Thread(LPVOID lp)
{
typedef bind2<C, R, P> bind;
bind* pThis = (bind*)lp;
pThis->Run();
delete pThis;
return 0;
}
};
template<class C, class R>
bool StartThread(C* pThis, R (C::* pfn)())
{
bind1<C, R>* pbin = new bind1<C, R>(pThis,pfn);
return CreateThread(0, 0, __Thread__<C, R>::Thread,pbin,0, 0) != NULL;
}
template<class C, class R>
bool StartThread(C* pThis, R (C::* pfn)(LPVOID), LPVOID lp)
{
bind2<C, R,LPVOID>* pbin = new bind2<C, R, LPVOID>(pThis,pfn, lp);
return CreateThread(0, 0, __Thread2__<C, R, LPVOID>::Thread,pbin,0, 0) != NULL;
}
}//end namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -