#ifndef CThread_h
#define CThread_h

/*!
 	\file
 	\brief	自分自身がスレッドのクラス
 */

#include"../../Setup/CompileMode.h"
#include"../Macro.h"
#include"CThreadController.h"

namespace Maid
{
	class IThread
	{
	public:
		IThread();
		virtual ~IThread();

		void Start();
		void Pause();
		void Resume();

		void End();

	protected:
		bool IsExit();

		//! この関数を実装すると、別スレッドで動作する
		/*!
			注意：　この関数内で継承したクラスの関数を呼ぶ場合
					このインスタンスがなくなる前に End() しておくこと
		 */
		virtual unt ThreadFunction() = 0;

	private:
		unt ProxyThreadFunction( volatile CThreadController::BRIGEDATA& brige );
		volatile CThreadController::BRIGEDATA* m_pBrige;
		CThreadController	m_Ctl;

	};

}

#endif


