1 #pragma once
2 
3 #define MT_CPUCORE_ANY (0xffffffff)
4 
5 #include <Platform/Common/MTAtomic.h>
6 
7 namespace MT
8 {
9 	namespace ThreadPriority
10 	{
11 		enum Type
12 		{
13 			HIGH = 0,
14 			DEFAULT = 1,
15 			LOW = 2
16 		};
17 	}
18 
19 
20 	class ThreadBase
21 	{
22 	protected:
23 		void * funcData;
24 		TThreadEntryPoint func;
25 	public:
26 
27 		MT_NOCOPYABLE(ThreadBase);
28 
29 		ThreadBase()
30 			: funcData(nullptr)
31 			, func(nullptr)
32 		{
33 		}
34 
35 		static void SpinSleepMicroSeconds(uint32 microseconds)
36 		{
37 			int64 desiredTime = GetTimeMicroSeconds() + microseconds;
38 			for(;;)
39 			{
40 				int64 timeNow = GetTimeMicroSeconds();
41 				if (timeNow > desiredTime)
42 				{
43 					break;
44 				}
45 				YieldCpu();
46 			}
47 		}
48 
49 		static void SpinSleepMilliSeconds(uint32 milliseconds)
50 		{
51 			int64 desiredTime = GetTimeMilliSeconds() + milliseconds;
52 			while(GetTimeMilliSeconds() <= desiredTime) {}
53 		}
54 
55 	};
56 }
57 
58 
59