//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: thread.hpp
//      Краткое описание: класс, представляющий поток
//

#ifndef DSE_KERNEL_THREADS_THREAD_HPP
#define DSE_KERNEL_THREADS_THREAD_HPP

#include <Darkstar/common.hpp>

namespace ker
{
	enum ThreadPriority
	{
		NORMAL_PRIORITY = 0,
		ABOVE_NORMAL_PRIORITY = 1,
		BELOW_NORMAL_PRIORITY = -1,
		HIGHEST_PRIORITY = 2,
		IDLE_PRIORITY = -15,
		LOWEST_PRIORITY = -2,
		TIME_CRITICAL_PRIORITY = 15
	};

	class Thread
	{
	private:
		HANDLE thread_handle;
		DWORD thread_id;
		ThreadPriority priority;
	public:
		Thread();
		Thread(LPTHREAD_START_ROUTINE threadproc, LPVOID params, bool is_suspend);
		~Thread();

		bool create(LPTHREAD_START_ROUTINE threadproc, LPVOID params, bool is_suspend);
		bool resume();
		bool suspend();
		bool setThreadPriority(const ThreadPriority& thread_pr);
		
		HANDLE getThreadHandle() const;
		DWORD getThreadID() const;
		const ThreadPriority& getThreadPriority() const;
	};
};

#include <Darkstar/Kernel/Threads/thread.inl>

#endif