// // Copyright (c) 2017 The Khronos Group Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "genericThread.h" #if defined(_WIN32) #include #else // !_WIN32 #include #endif void *genericThread::IStaticReflector(void *data) { genericThread *t = (genericThread *)data; return t->IRun(); } bool genericThread::Start(void) { #if defined(_WIN32) mHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)IStaticReflector, this, 0, NULL); return (mHandle != NULL); #else // !_WIN32 int error = pthread_create((pthread_t *)&mHandle, NULL, IStaticReflector, (void *)this); return (error == 0); #endif // !_WIN32 } void *genericThread::Join(void) { #if defined(_WIN32) WaitForSingleObject((HANDLE)mHandle, INFINITE); return NULL; #else // !_WIN32 void *retVal; int error = pthread_join((pthread_t)mHandle, &retVal); if (error != 0) retVal = NULL; return retVal; #endif // !_WIN32 }