mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 15:30:52 +01:00
ircd::ctx: Add sleep() suite, or a wait() which ignores notification.
This commit is contained in:
parent
1a367399d3
commit
e2d115a97a
3 changed files with 27 additions and 1 deletions
|
@ -29,7 +29,6 @@
|
|||
namespace ircd {
|
||||
namespace ctx {
|
||||
|
||||
using std::chrono::microseconds;
|
||||
using std::chrono::steady_clock;
|
||||
using time_point = steady_clock::time_point;
|
||||
|
||||
|
@ -75,6 +74,11 @@ bool wait_until(const time_point &tp, const std::nothrow_t &);
|
|||
template<class E> nothrow_overload<E, bool> wait_until(const time_point &tp);
|
||||
template<class E = timeout> throw_overload<E> wait_until(const time_point &tp);
|
||||
|
||||
// Ignores notes. Throws if interrupted.
|
||||
void sleep_until(const time_point &tp);
|
||||
template<class duration> void sleep(const duration &);
|
||||
void sleep(const int &secs);
|
||||
|
||||
class context
|
||||
{
|
||||
std::unique_ptr<ctx> c;
|
||||
|
@ -108,6 +112,19 @@ noexcept
|
|||
std::swap(a.c, b.c);
|
||||
}
|
||||
|
||||
inline void
|
||||
sleep(const int &secs)
|
||||
{
|
||||
sleep(seconds(secs));
|
||||
}
|
||||
|
||||
template<class duration>
|
||||
void
|
||||
sleep(const duration &d)
|
||||
{
|
||||
sleep_until(steady_clock::now() + d);
|
||||
}
|
||||
|
||||
template<class E>
|
||||
throw_overload<E>
|
||||
wait_until(const time_point &tp)
|
||||
|
|
|
@ -44,6 +44,9 @@ namespace ircd
|
|||
using std::begin;
|
||||
using std::end;
|
||||
using std::get;
|
||||
using std::chrono::seconds;
|
||||
using std::chrono::milliseconds;
|
||||
using std::chrono::microseconds;
|
||||
using ostream = std::ostream;
|
||||
namespace ph = std::placeholders;
|
||||
using namespace std::string_literals;
|
||||
|
|
|
@ -29,6 +29,12 @@ using namespace ircd;
|
|||
//
|
||||
__thread ctx::ctx *ctx::current;
|
||||
|
||||
void
|
||||
ctx::sleep_until(const std::chrono::steady_clock::time_point &tp)
|
||||
{
|
||||
while(!wait_until(tp, std::nothrow));
|
||||
}
|
||||
|
||||
bool
|
||||
ctx::wait_until(const std::chrono::steady_clock::time_point &tp,
|
||||
const std::nothrow_t &)
|
||||
|
|
Loading…
Reference in a new issue