OSDN Git Service

Add Thread::isRunning and Condition::signal(WakeUpType)
authorRomain Guy <romainguy@google.com>
Mon, 11 Mar 2013 21:34:56 +0000 (14:34 -0700)
committerRomain Guy <romainguy@google.com>
Mon, 11 Mar 2013 21:34:56 +0000 (14:34 -0700)
The signal() method is useful to choose whether to wake up one or
all threads.

Change-Id: I062ab6d3ddd306a9fb735549ea140e2a76eed75a

include/utils/Condition.h
include/utils/Thread.h
libs/utils/Threads.cpp

index 8852d53..e63ba7e 100644 (file)
@@ -48,6 +48,11 @@ public:
         SHARED = 1
     };
 
+    enum WakeUpType {
+        WAKE_UP_ONE = 0,
+        WAKE_UP_ALL = 1
+    };
+
     Condition();
     Condition(int type);
     ~Condition();
@@ -57,6 +62,14 @@ public:
     status_t waitRelative(Mutex& mutex, nsecs_t reltime);
     // Signal the condition variable, allowing one thread to continue.
     void signal();
+    // Signal the condition variable, allowing one or all threads to continue.
+    void signal(WakeUpType type) {
+        if (type == WAKE_UP_ONE) {
+            signal();
+        } else {
+            broadcast();
+        }
+    }
     // Signal the condition variable, allowing all threads to continue.
     void broadcast();
 
index 4a34abd..df30611 100644 (file)
@@ -67,6 +67,9 @@ public:
     // Do not call from this object's thread; will return WOULD_BLOCK in that case.
             status_t    join();
 
+    // Indicates whether this thread is running or not.
+            bool        isRunning() const;
+
 #ifdef HAVE_ANDROID_OS
     // Return the thread's kernel ID, same as the thread itself calling gettid() or
     // androidGetTid(), or -1 if the thread is not running.
index a25a81f..1d61457 100644 (file)
@@ -871,6 +871,11 @@ status_t Thread::join()
     return mStatus;
 }
 
+bool Thread::isRunning() const {
+    Mutex::Autolock _l(mLock);
+    return mRunning;
+}
+
 #ifdef HAVE_ANDROID_OS
 pid_t Thread::getTid() const
 {