diff options
author | 2012-10-31 19:29:13 +0000 | |
---|---|---|
committer | 2012-10-31 19:29:13 +0000 | |
commit | 4d3c28158a65f9eac6b472dff29caa77b44f8134 (patch) | |
tree | 1c93fb4a955c852c70c3b4b1553d59ed1defb13e /include/utils/SkCondVar.h | |
parent | 0b7da433fe0eaa2833d1b2900715b013b36d93da (diff) |
Implement SkCondVar for windows.
Only works on Vista or later, since it uses condition variables.
Review URL: https://codereview.appspot.com/6812062
git-svn-id: http://skia.googlecode.com/svn/trunk@6225 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/utils/SkCondVar.h')
-rw-r--r-- | include/utils/SkCondVar.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/include/utils/SkCondVar.h b/include/utils/SkCondVar.h index d2539e4b9e..15f16e662f 100644 --- a/include/utils/SkCondVar.h +++ b/include/utils/SkCondVar.h @@ -8,19 +8,38 @@ #ifndef SkCondVar_DEFINED #define SkCondVar_DEFINED +#ifdef SK_USE_POSIX_THREADS #include <pthread.h> +#elif defined(SK_BUILD_FOR_WIN32) +#include <Windows.h> +#endif +/** + * Condition variable for blocking access to shared data from other threads and + * controlling which threads are awake. + * + * Currently only supported on platforms with posix threads and Windows Vista and + * above. + */ class SkCondVar { public: SkCondVar(); ~SkCondVar(); + /** + * Lock a mutex. Must be done before calling the other functions on this object. + */ void lock(); + + /** + * Unlock the mutex. + */ void unlock(); /** - * Pause the calling thread. Will be awoken when signal() is called. - * Must be called while lock() is held (but gives it up while waiting). + * Pause the calling thread. Will be awoken when signal() or broadcast() is called. + * Must be called while lock() is held (but gives it up while waiting). Once awoken, + * the calling thread will hold the lock once again. */ void wait(); @@ -37,9 +56,13 @@ public: void broadcast(); private: - // FIXME: Make this independent of pthreads. +#ifdef SK_USE_POSIX_THREADS pthread_mutex_t fMutex; pthread_cond_t fCond; +#elif defined(SK_BUILD_FOR_WIN32) + CRITICAL_SECTION fCriticalSection; + CONDITION_VARIABLE fCondition; +#endif }; #endif |