/* * Copyright 2011 Google Inc. All Rights Reserved. * * 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. */ // Simple platform thread implementation used to test our cross-platform locks. // This is a trimmed down version of Chromium base/threading/platform_thread.h. #ifndef SFNTLY_CPP_SRC_TEST_PLATFORM_THREAD_H_ #define SFNTLY_CPP_SRC_TEST_PLATFORM_THREAD_H_ #if defined (WIN32) #include <windows.h> #else // Assume pthread #include <errno.h> #include <pthread.h> #include <time.h> #endif // if defined (WIN32) #include "sfntly/port/type.h" namespace sfntly { #if defined (WIN32) typedef HANDLE PlatformThreadHandle; const PlatformThreadHandle kNullThreadHandle = NULL; #else // Assume pthread typedef pthread_t PlatformThreadHandle; const PlatformThreadHandle kNullThreadHandle = 0; #endif class PlatformThread { public: class Delegate { public: virtual ~Delegate() {} virtual void ThreadMain() = 0; }; // Sleeps for the specified duration (units are milliseconds). static void Sleep(int32_t duration_ms); // Creates a new thread using default stack size. Upon success, // |*thread_handle| will be assigned a handle to the newly created thread, // and |delegate|'s ThreadMain method will be executed on the newly created // thread. // NOTE: When you are done with the thread handle, you must call Join to // release system resources associated with the thread. You must ensure that // the Delegate object outlives the thread. static bool Create(Delegate* delegate, PlatformThreadHandle* thread_handle); // Joins with a thread created via the Create function. This function blocks // the caller until the designated thread exits. This will invalidate // |thread_handle|. static void Join(PlatformThreadHandle thread_handle); private: PlatformThread() {} NO_COPY_AND_ASSIGN(PlatformThread); }; } // namespace sfntly #endif // SFNTLY_CPP_SRC_TEST_PLATFORM_THREAD_H_