From: Gabriel Corona Date: Wed, 20 Jul 2016 10:39:46 +0000 (+0200) Subject: [s4u] Support for C++11-style duration in ConditionVariable X-Git-Tag: v3_14~737^2~9 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/0f85c75558b648a231f53f4dba18cc6788858b10?ds=sidebyside [s4u] Support for C++11-style duration in ConditionVariable Better compatibility witd std::condition_variable API. --- diff --git a/include/simgrid/s4u/conditionVariable.hpp b/include/simgrid/s4u/conditionVariable.hpp index cad750720d..2db6fb8f9d 100644 --- a/include/simgrid/s4u/conditionVariable.hpp +++ b/include/simgrid/s4u/conditionVariable.hpp @@ -6,6 +6,7 @@ #ifndef SIMGRID_S4U_COND_VARIABLE_HPP #define SIMGRID_S4U_COND_VARIABLE_HPP +#include #include #include #include @@ -51,6 +52,27 @@ public: std::cv_status wait_until(std::unique_lock& lock, double timeout_time); std::cv_status wait_for(std::unique_lock& lock, double duration); + /** Wait for a given duraiton + * + * This version gives us the ability to do (in C++): + * + * + * using namespace std::literals::chrono_literals; + * + * cond->wait_for(lock, 1ms); + * cond->wait_for(lock, 1s); + * cond->wait_for(lock, 1min); + * cond->wait_for(lock, 1h); + * + */ + template + std::cv_status wait_for(std::unique_lock& lock, std::chrono::duration duration) + { + typedef std::chrono::duration SecondsDouble; + auto seconds = std::chrono::duration_cast(duration); + return this->wait_for(lock, duration.count()); + } + // Variants which takes a predicate: template @@ -72,6 +94,13 @@ public: { return this->wait_until(lock, SIMIX_get_clock() + duration, std::move(pred)); } + template + bool wait_for(std::unique_lock& lock, std::chrono::duration duration, P pred) + { + typedef std::chrono::duration SecondsDouble; + auto seconds = std::chrono::duration_cast(duration); + return this->wait_for(lock, seconds.count(), pred); + } // Notify functions