mijin2/source/mijin/async/coroutine_sleep.hpp

28 lines
605 B
C++

#pragma once
#if !defined(MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED)
#define MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED 1
#include <chrono>
#include "./coroutine.hpp"
namespace mijin
{
template<typename Rep, typename Period>
Task<> c_sleep(std::chrono::duration<Rep, Period> duration)
{
auto now = std::chrono::high_resolution_clock::now();
const auto end = now + duration;
while (now < end)
{
co_await c_suspend();
now = std::chrono::high_resolution_clock::now();
}
co_return;
}
} // namespace mijin
#endif // !defined(MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED)