#pragma once

#include "LockObject.h"
#include "TimeOut.h"

/*!
	class CThreadSkeleton

	スレッドのベースです
*/
class CThreadSkeleton
{
protected:
	CCriticalSection	m_scopeLock;

public:
	CThreadSkeleton(void);
	virtual ~CThreadSkeleton(void);

public:
	int StartThread();		//!<	スレッドの開始
	int IsRunning();		//!<	実行中か取得
	void EndThread();		//!<	スレッドの終了・強制終了
	virtual void Break();	//!<	中断
	int GetBreak();			//!<	中断要求を取得

protected:
	virtual void ThreadMain() = 0;	//!<	スレッドの処理
	void _ThreadMain();				//!<	スレッド処理の準備

	CLockObject<int>	m_break;	//!<	中断フラグ
	CLockObject<int>	m_run;		//!<	実行フラグ


private:
	static UINT WorkThread(LPVOID pParam);
};
