summaryrefslogtreecommitdiff
path: root/components/cplusplus/Semaphore.cpp
diff options
context:
space:
mode:
authorbernard <[email protected]>2017-01-31 13:19:18 +0800
committerbernard <[email protected]>2017-01-31 13:19:18 +0800
commiteb2c0981974ef5d93e6315880973c4c256c89dc3 (patch)
tree5bbb6c36337408262240ef9021d2bd12719e346d /components/cplusplus/Semaphore.cpp
parent6b183461994ca25f4ea1a8fc78c67320b3fc9481 (diff)
[C++] Add C++ interface for RT-Thread kernel.
Diffstat (limited to 'components/cplusplus/Semaphore.cpp')
-rw-r--r--components/cplusplus/Semaphore.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/components/cplusplus/Semaphore.cpp b/components/cplusplus/Semaphore.cpp
new file mode 100644
index 0000000000..2579bcb041
--- /dev/null
+++ b/components/cplusplus/Semaphore.cpp
@@ -0,0 +1,30 @@
+#include "Semaphore.h"
+
+using namespace rtthread;
+
+Semaphore::Semaphore(const char *name, int32_t count)
+{
+ rt_sem_init(&mID, name, count, RT_IPC_FLAG_FIFO);
+}
+
+bool Semaphore::wait(int32_t millisec)
+{
+ rt_int32_t tick;
+
+ if (millisec < 0)
+ tick = -1;
+ else
+ tick = rt_tick_from_millisecond(millisec);
+
+ return rt_sem_take(&mID, tick) == RT_EOK;
+}
+
+void Semaphore::release(void)
+{
+ rt_sem_release(&mID);
+}
+
+Semaphore::~Semaphore()
+{
+ rt_sem_detach(&mID);
+}