////////////////////////////////////////////////////////////////////////////
// CThread クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( THREAD_H_INCLUDED_ )
#define THREAD_H_INCLUDED_

#include <pthread.h>
#include "Semaphore.h"

class CThread
{
public:
	CThread();
	~CThread();

	// スレッドの開始
	virtual bool start();

	// スレッドのエントリポイント
	virtual void run();

	// スレッドの前後の処理
	void RunEntry();

	// スレッド番号を取得
	pthread_t GetThreadID() const;

	// このスレッドの終了を待ち合わせる
	void Wait();

	// 一定時間だけスレッドの終了を待ち合わせる
	bool WaitForTime( int ms );

protected:

	// スレッドを終了させる
	void ExitThread();

private:
	// スレッドのＩＤ
	pthread_t m_ThreadID;

	// このスレッドの待ち合わせ用
	CSemaphore semaWait;
	CSemaphore semaExitFlg;
	bool IsExit;	// 終了したか否か
};


#endif // THREAD_H_INCLUDED_

