38 DWORD WINAPI PlatformThread::Do(LPVOID Data) { |
38 DWORD WINAPI PlatformThread::Do(LPVOID Data) { |
39 PlatformThread* self = (PlatformThread*)Data; |
39 PlatformThread* self = (PlatformThread*)Data; |
40 self->Execute(); |
40 self->Execute(); |
41 return 0; |
41 return 0; |
42 } |
42 } |
43 #endif //WINDOWS |
43 #endif // WINDOWS |
44 #ifdef POSIX |
44 #ifdef POSIX |
45 void* PlatformThread::Do(void *Data) { |
45 void* PlatformThread::Do(void *Data) { |
46 PlatformThread* self = (PlatformThread*)Data; |
46 PlatformThread* self = (PlatformThread*)Data; |
47 self->Execute(); |
47 self->Execute(); |
48 pthread_exit(NULL); |
48 pthread_exit(NULL); |
49 } |
49 } |
50 #endif //POSIX |
50 #endif // POSIX |
51 |
51 |
52 void PlatformThread::Run() { |
52 void PlatformThread::Run() { |
53 #ifdef WINDOWS |
53 #ifdef WINDOWS |
54 FHandle = CreateThread(NULL, 0, Do, this, 0, &FThreadID); |
54 FHandle = CreateThread(NULL, 0, Do, this, 0, &FThreadID); |
55 #endif //WINDOWS |
55 #endif // WINDOWS |
56 #ifdef POSIX |
56 #ifdef POSIX |
57 pthread_create(&FHandle, NULL, Do, this); |
57 pthread_create(&FHandle, NULL, Do, this); |
58 #endif //POSIX |
58 #endif // POSIX |
59 } |
59 } |
60 |
60 |
61 void PlatformThread::Terminate() { |
61 void PlatformThread::Terminate() { |
62 #ifdef WINDOWS |
62 #ifdef WINDOWS |
63 CloseHandle(FHandle); |
63 CloseHandle(FHandle); |
64 #endif //WINDOWS |
64 #endif // WINDOWS |
65 #ifdef POSIX |
65 #ifdef POSIX |
66 pthread_cancel(FHandle); |
66 pthread_cancel(FHandle); |
67 #endif //POSIX |
67 #endif // POSIX |
68 } |
68 } |
69 |
69 |
70 void PlatformThread::Wait() { |
70 void PlatformThread::Wait() { |
71 #ifdef WINDOWS |
71 #ifdef WINDOWS |
72 WaitForSingleObject(FHandle, INFINITE); |
72 WaitForSingleObject(FHandle, INFINITE); |
73 #endif //WINDOWS |
73 #endif // WINDOWS |
74 #ifdef POSIX |
74 #ifdef POSIX |
75 pthread_join(FHandle, NULL); |
75 pthread_join(FHandle, NULL); |
76 #endif //POSIX |
76 #endif // POSIX |
77 } |
77 } |