#pragma once

class cThread
{
public:
	typedef void (ThreadFunc)(void*);
	cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName = 0 );
	~cThread();

	void Start( bool a_bWaitOnDelete = true );
	void WaitForThread();
private:
	ThreadFunc* m_ThreadFunction;

#ifdef _WIN32
	static unsigned long MyThread(void* a_Param );
#else
	static void *MyThread( void *lpParam );
#endif

	void* m_Param;
	cEvent* m_Event;
	cEvent* m_StopEvent;

	AString m_ThreadName;
};
