X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/5c7ecee696b69e6177921d0077a2b1875f6e3f00..612a491138746843a9fe0df8551e6ccf6ea2cf27:/synchro.h?ds=inline diff --git a/synchro.h b/synchro.h index e366bee..07897e0 100644 --- a/synchro.h +++ b/synchro.h @@ -1,7 +1,8 @@ #ifndef SYNCHRO_H #define SYNCHRO_H -#include +#include +#include class mutex_t { public: @@ -23,8 +24,17 @@ public: void broadcast() { xbt_cond_broadcast(cond); } void signal() { xbt_cond_signal(cond); } void wait(mutex_t& mutex) { xbt_cond_wait(cond, mutex.mutex); } - void timedwait(mutex_t& mutex, double delay) { - xbt_cond_timedwait(cond, mutex.mutex, delay); + bool timedwait(mutex_t& mutex, double delay) { + try { + xbt_cond_timedwait(cond, mutex.mutex, delay); + } + catch (const xbt_ex& e) { + if (e.category != timeout_error) + throw; + mutex.acquire(); + return false; // got a timeout + } + return true; } private: