7 #define WIN32_LEAN_AND_MEAN
24 #if !defined(__WIN32__)
28 public enum ThreadPriority
43 #if defined(__WIN32__)
49 #if defined(__WIN32__)
61 #if defined(__WIN32__)
64 void * ThreadCallBack()
67 uint returnCode = this.returnCode = Main();
69 #if defined(__WIN32__)
79 #if defined(__WIN32__)
82 return (void *)(uintptr_t)returnCode;
87 virtual uint Main(void);
94 #if !defined(__WIN32__)
98 // printf("Creating %s thread\n", _class.name);
99 #if defined(__WIN32__)
103 handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadCallBack, this, 0, &tID);
109 /*pthread_attr_t attr;
110 pthread_attr_init(&attr);
111 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);*/ // Default attribute ???
112 error = pthread_create(&id, null /*&attr*/, ThreadCallBack, this);
114 printf("Error %d creating a thread\n", error);
122 #if defined(__WIN32__)
125 TerminateThread(handle, 0);
130 pthread_kill(id, SIGQUIT);
141 #if defined(__WIN32__)
142 if(WaitForSingleObject(handle, INFINITE /*2000*/) == WAIT_TIMEOUT)
143 PrintLn("Thread not returning?\n");
148 pthread_join(id, NULL);*/
155 void SetPriority(ThreadPriority priority)
157 #if defined(__WIN32__)
158 SetThreadPriority(handle, priority);
161 struct sched_param param;
162 int policy = (priority > 0) ? SCHED_RR : SCHED_OTHER;
163 param.sched_priority = (priority > 0) ? (priority * 99 / 15) : 0;
164 pthread_setschedparam(id, policy, ¶m);
169 property bool created { get { return started; } };