From eb2c0981974ef5d93e6315880973c4c256c89dc3 Mon Sep 17 00:00:00 2001 From: bernard Date: Tue, 31 Jan 2017 13:19:18 +0800 Subject: [C++] Add C++ interface for RT-Thread kernel. --- components/cplusplus/Semaphore.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 components/cplusplus/Semaphore.cpp (limited to 'components/cplusplus/Semaphore.cpp') 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); +} -- cgit v1.3.1