#ifndef __INC_ETERLIB_THREAD_H__
#define __INC_ETERLIB_THREAD_H__

class CThread
{
	public:
		CThread();
		int Create(void * arg);
		
	protected:
		static UINT CALLBACK	EntryPoint(void * pThis);

		virtual UINT			Setup() = 0;				// Execute이 불려지기 전에 불려진다.
		virtual UINT			Execute(void * arg) = 0;	// 실제 쓰레드가 하는 일이 들어가는 곳

		UINT					Run(void * arg);

		void *					Arg() const		{ return m_pArg; }
		void					Arg(void * arg) { m_pArg = arg; }
		
		HANDLE					m_hThread;

	private:
		void *					m_pArg;
		unsigned				m_uThreadID;
};

#endif
