From 6eb06945e4115f5f7c67368dfb05646e8ee72caa Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 12 May 2012 15:49:11 +0000 Subject: Add Semaphore::timed_wait(). git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4379 a436a847-0d15-0410-975c-d299462d15a1 --- test/sem_test.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ test/thread_test.cpp | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 test/sem_test.cpp (limited to 'test') diff --git a/test/sem_test.cpp b/test/sem_test.cpp new file mode 100644 index 0000000..e1f2fb4 --- /dev/null +++ b/test/sem_test.cpp @@ -0,0 +1,49 @@ +#include +#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() { + while (true) { + if (_sem.timed_wait(250)) { + cout << "[Waiter] Received signal" << endl; + break; + } else { + cout << "[Waiter] Timed out" << endl; + } + } + cout << "[Waiter] Exiting" << endl; + } + + Semaphore& _sem; +}; + +int +main() +{ + Thread& this_thread = Thread::get(); + this_thread.set_name("Main"); + + Semaphore sem(0); + Waiter waiter(sem); + waiter.start(); + + sleep(1); + + cout << "[Main] Signalling..." << endl; + sem.post(); + + waiter.join(); + cout << "[Main] Exiting" << endl; + + return 0; +} diff --git a/test/thread_test.cpp b/test/thread_test.cpp index 176e544..84840de 100644 --- a/test/thread_test.cpp +++ b/test/thread_test.cpp @@ -31,7 +31,7 @@ main() Waiter waiter(sem); waiter.start(); - cout << "[Main] Signaling..." << endl; + cout << "[Main] Signalling..." << endl; sem.post(); cout << "[Main] Waiting for waiter..." << endl; -- cgit v1.2.1