template.h

来自「VIPSHELL2007客户端代码」· C头文件 代码 · 共 110 行

H
110
字号

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 + =
减小字号Ctrl + -
显示快捷键?