diff options
| author | HubretXie <[email protected]> | 2019-08-16 21:28:29 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-08-16 21:28:29 +0800 |
| commit | 9662e18c3688681cd95ebd65242773dbe7c1366b (patch) | |
| tree | eb5b5326efc603b359d8758ee6cd17eebfb1fa75 /components/cplusplus/Thread.cpp | |
| parent | 56a65431dc830d6234a8a3286fea35664a65aeb1 (diff) | |
| parent | 3b252d5b9721bb7cc649dad832507937efc1e96c (diff) | |
Merge pull request #7 from RT-Thread/master
sync
Diffstat (limited to 'components/cplusplus/Thread.cpp')
| -rw-r--r-- | components/cplusplus/Thread.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/components/cplusplus/Thread.cpp b/components/cplusplus/Thread.cpp index 0f6315d178..b21fbdce1f 100644 --- a/components/cplusplus/Thread.cpp +++ b/components/cplusplus/Thread.cpp @@ -14,7 +14,7 @@ Thread::Thread(rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick, const char *name) -: _entry(RT_NULL), _param(RT_NULL), started(false) + : _entry(RT_NULL), _param(RT_NULL), started(false) { rt_event_init(&_event, name, 0); @@ -32,7 +32,7 @@ Thread::Thread(void (*entry)(void *p), rt_uint8_t priority, rt_uint32_t tick, const char *name) -: _entry(RT_NULL), _param(p), started(false) + : _entry(entry), _param(p), started(false) { rt_event_init(&_event, name, 0); @@ -46,6 +46,7 @@ Thread::Thread(void (*entry)(void *p), Thread::~Thread() { + rt_event_detach(&_event); rt_thread_delete(_thread); } @@ -79,23 +80,23 @@ void Thread::func(Thread *pThis) } else { - pThis->run(); + pThis->run(pThis->_param); } rt_event_send(&pThis->_event, 1); } -void Thread::run() +void Thread::run(void *parameter) { /* please overload this method */ } -void Thread::wait(int32_t millisec) +rt_err_t Thread::wait(int32_t millisec) { - join(millisec); + return join(millisec); } -void Thread::join(int32_t millisec) +rt_err_t Thread::join(int32_t millisec) { if (started) { @@ -106,6 +107,10 @@ void Thread::join(int32_t millisec) else tick = rt_tick_from_millisecond(millisec); - rt_event_recv(&_event, 1, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, tick, RT_NULL); + return rt_event_recv(&_event, 1, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, tick, RT_NULL); + } + else + { + return -RT_ENOSYS; } } |
