Index: base/threading/platform_thread.h |
diff --git a/base/threading/platform_thread.h b/base/threading/platform_thread.h |
index 576695a4e7b5f8028f47cc5e02921b551ffb0a39..c5975000016cd54d573549f3ef36bc4255c29c8b 100644 |
--- a/base/threading/platform_thread.h |
+++ b/base/threading/platform_thread.h |
@@ -23,27 +23,66 @@ |
namespace base { |
-// PlatformThreadHandle should not be assumed to be a numeric type, since the |
-// standard intends to allow pthread_t to be a structure. This means you |
-// should not initialize it to a value, like 0. If it's a member variable, the |
-// constructor can safely "value initialize" using () in the initializer list. |
#if defined(OS_WIN) |
typedef DWORD PlatformThreadId; |
-typedef void* PlatformThreadHandle; // HANDLE |
-const PlatformThreadHandle kNullThreadHandle = NULL; |
#elif defined(OS_POSIX) |
-typedef pthread_t PlatformThreadHandle; |
-const PlatformThreadHandle kNullThreadHandle = 0; |
typedef pid_t PlatformThreadId; |
#endif |
-const PlatformThreadId kInvalidThreadId = 0; |
+class PlatformThreadHandle { |
+ public: |
+#if defined(OS_WIN) |
+ typedef void* Handle; |
+#elif defined(OS_POSIX) |
+ typedef pthread_t Handle; |
+#endif |
+ |
+ PlatformThreadHandle() |
+ : handle_(0), |
+ id_(0) { |
+ } |
+ |
+ explicit PlatformThreadHandle(Handle handle) |
+ : handle_(handle), |
+ id_(0) { |
+ } |
+ |
+ PlatformThreadHandle(Handle handle, |
+ PlatformThreadId id) |
+ : handle_(handle), |
+ id_(id) { |
+ } |
+ |
+ bool is_equal(const PlatformThreadHandle& other) { |
+ return handle_ == other.handle_; |
+ } |
+ |
+ bool is_null() { |
+ return !handle_; |
+ } |
+ |
+ Handle platform_handle() { |
+ return handle_; |
+ } |
+ |
+ private: |
+ friend class PlatformThread; |
+ |
+ Handle handle_; |
+ PlatformThreadId id_; |
+}; |
+ |
+const PlatformThreadId kInvalidThreadId(0); |
// Valid values for SetThreadPriority() |
enum ThreadPriority{ |
kThreadPriority_Normal, |
// Suitable for low-latency, glitch-resistant audio. |
- kThreadPriority_RealtimeAudio |
+ kThreadPriority_RealtimeAudio, |
+ // Suitable for threads which generate data for the display (at ~60Hz). |
+ kThreadPriority_Display, |
+ // Suitable for threads that shouldn't disrupt high priority work. |
+ kThreadPriority_Background |
}; |
// A namespace for low-level thread functions. |
@@ -62,6 +101,9 @@ class BASE_EXPORT PlatformThread { |
// Gets the current thread id, which may be useful for logging purposes. |
static PlatformThreadId CurrentId(); |
+ // Get the current handle. |
+ static PlatformThreadHandle CurrentHandle(); |
+ |
// Yield the current thread so another thread can be scheduled. |
static void YieldCurrentThread(); |
@@ -106,8 +148,6 @@ class BASE_EXPORT PlatformThread { |
// |thread_handle|. |
static void Join(PlatformThreadHandle thread_handle); |
- // Sets the priority of the thread specified in |handle| to |priority|. |
- // This does not work on Linux, use CreateWithPriority() instead. |
static void SetThreadPriority(PlatformThreadHandle handle, |
ThreadPriority priority); |