diff options
-rw-r--r-- | raul/Thread.hpp | 2 | ||||
-rw-r--r-- | src/Thread.cpp | 6 | ||||
-rw-r--r-- | test/thread_test.cpp | 30 |
3 files changed, 35 insertions, 3 deletions
diff --git a/raul/Thread.hpp b/raul/Thread.hpp index b81d32a..7172854 100644 --- a/raul/Thread.hpp +++ b/raul/Thread.hpp @@ -57,6 +57,8 @@ public: virtual void start(); virtual void stop(); + virtual void join(); + void set_scheduling(int policy, unsigned int priority); const std::string& name() const { return _name; } diff --git a/src/Thread.cpp b/src/Thread.cpp index d45f363..045db0f 100644 --- a/src/Thread.cpp +++ b/src/Thread.cpp @@ -115,6 +115,12 @@ Thread::stop() } void +Thread::join() +{ + pthread_join(_pthread, NULL); +} + +void Thread::set_scheduling(int policy, unsigned int priority) { sched_param sp; diff --git a/test/thread_test.cpp b/test/thread_test.cpp index fd7a411..63ec347 100644 --- a/test/thread_test.cpp +++ b/test/thread_test.cpp @@ -1,19 +1,43 @@ #include <iostream> #include "raul/Thread.hpp" +#include "raul/Semaphore.hpp" using namespace std; using namespace Raul; +class Waiter : public Raul::Thread { +public: + Waiter(Semaphore& sem) : _sem(sem) { + Thread::set_name("Waiter"); + } + +private: + void _run() { + cout << "[Waiter] Waiting for signal..." << endl; + _sem.wait(); + cout << "[Waiter] Received signal, exiting" << endl; + } + + Semaphore& _sem; +}; + int main() { Thread& this_thread = Thread::get(); this_thread.set_name("Main"); - cout << "Thread name should be Main" << endl; + Semaphore sem(0); + Waiter waiter(sem); + waiter.start(); + + cout << "[Main] Signaling..." << endl; + sem.post(); - cout << "Thread name: " << Thread::get().name() << endl; + cout << "[Main] Waiting for waiter..." << endl; + waiter.join(); + + cout << "[Main] Exiting" << endl; return 0; } - |